0

我无法弄清楚以下 python 多处理代码有什么问题。它不会终止。任何建议将不胜感激。

from multiprocessing import Process, Queue, Lock

def hello(num, myqueue):
   while True:
      item = myqueue.get()
      print 'Thread ', num, 'got', item
   return

def put_on_queue(myqueue):
   for i in range(10):
      myqueue.put(i)
   return

if __name__ == '__main__':
   processes = []

   myqueue = Queue()

   for i in range(4):
      proc = Process(target = hello, args = (i, myqueue))
      proc.start()
      processes.append(proc)

   put_on_queue(myqueue)

   for proc in processes:
       proc.join()

- - - - - - - 编辑 - - - - - - - - -

好的,所以根据我收到的评论和一些在线帮助,我修改了我的代码,如下所示。仍然没有运气:-(

def hello(num, myqueue):
  while not exit_flag:
     item = myqueue.get(False,5)
     print 'Thread ', num, 'got', item
  return


def put_on_queue(myqueue):
  global exit_flag 
  for i in range(10):         
     myqueue.put(i)

   while not myqueue.empty():
      pass
   exit_flag = 1

   return

if __name__ == '__main__':
  mylock = Lock()
  processes = []
  myqueue = Queue()

  exit_flag = 0

  for i in range(4):
     proc = Process(target = hello, args = (i, myqueue))
     #proc.daemon = True
     proc.start()
     processes.append(proc)

  put_on_queue(myqueue)

  for proc in processes:
     proc.join()
4

1 回答 1

1

hello您的函数内部有一个无限循环。您必须将 sentinent 作为最后一个值放入队列中,检查它并跳出循环。

于 2012-07-25T02:00:21.230 回答