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
我等了1个多小时。我不明白。我以为多处理模块有一些bug或什么的。所以我改变了这段代码。这次我不使用多处理队列,我只是用它来计算一些数字。代码如下:
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?我不知道为什么。谁能为我解释一下?
答案 0 :(得分:0)
您没有捕获结果。您应该从apply_async()
捕获返回值,并在每个值上调用get()
。
另外,请尝试在timeout
或join()
中指定较大的get()
值。在某些版本的Python中,需要解决一个错误。