0
我無法弄清楚下面的python多處理代碼有什麼問題。它不會終止。任何建議將不勝感激。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()
--------------編輯-----------------
OK,所以根據該意見我收到了一些在線幫助,我修改了我的代碼,如下所示。仍然沒有運氣:-(
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()
你是對的......即使'queue.get'沒有被阻塞,它也會被循環卡住 – 2012-07-25 02:02:02
一旦你加入了所有的進程,子進程會自動終止,無論它是否處於無限循環中。想一想,請參閱我昨天發佈的[question](http://stackoverflow.com/questions/11620431/basic-python-multi-threading-issue)。 – JZee 2012-07-25 02:04:59
@JayZee:我想你誤解了其他答案。 orm [.join()')的[documentation](http://docs.python.org/library/multiprocessing.html#multiprocessing.Process.join):*「阻塞調用線程,直到join()方法被稱爲終止或直到發生可選的超時。「*因此調用進程只能在子進程終止時終止。但他們從來沒有做過!請注意,在您的其他問題中,**隊列**已加入,而不是其他線程。 – 2012-07-25 02:13:13