簡體   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