[英]In python, when use multiprocessing Pool, main process can not finished in some situation
第一種情況,主要過程無法完成,
from multiprocessing import Pool, Queue
queue = Queue()
def handle(slogan):
for i in xrange(100000):
queue.put(slogan)
print 'put done'
def main():
pools = Pool(2)
for i in xrange(4):
pools.apply_async(handle, args=('test', ))
print 'waiting all done...'
pools.close()
pools.join()
print 'all done...'
if __name__ == '__main__':
main()
這段代碼的結果,像這樣:
waiting all done...
put done
put done
put done
put done
我已經等了一個多小時。 我不明白。 我認為多處理模塊有一些錯誤或其他東西。 所以我改變了這段代碼。 這次我不使用多重處理隊列,我只是使用它來計算一些數字。 並編寫如下代碼:
from multiprocessing import Pool
def handle(slogan):
tmp = 0
for i in xrange(100000):
tmp += i
print 'put done'
def main():
pools = Pool(2)
for i in xrange(4):
pools.apply_async(handle, args=('test', ))
print 'waiting all done...'
pools.close()
pools.join()
print 'all done...'
if __name__ == '__main__':
main()
對於代碼,它成功完成,結果為:
waiting all done...
put done
put done
put done
put done
all done...
只是因為我使用Queue? 我不知道為什么。 誰能為我解釋?
您沒有捕獲結果。 您應該從apply_async()
捕獲返回值,並在每個返回值上調用get()
。
另外,嘗試在join()
或get()
指定較大的timeout
值。 在某些版本的Python中,這是解決bug所必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.