繁体   English   中英

在python中,使用多处理池时,主进程在某些情况下无法完成

[英]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所必需的。

另请参阅: https : //stackoverflow.com/a/3571687/4323

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM