簡體   English   中英

產生幾個並行進程並在完成后殺死它們

[英]Spawn few parallel processes and kill them after finish

我需要制作在某些情況下會產生並行處理(工作程序)並使其執行某些IO工作的腳本。 當完成時-關閉該過程。 但是看起來這些進程在默認情況下不會趨向於退出。

這是我的方法:

import multiprocessing

pool = multiprocessing.Pool(4)

def f(x):                        
    sleep(10)
    print(x)
    return True

r = pool.map_async(f, [1,2,3,4,5,6,7,8,9,10])

但是我可以在ipython中運行它並進行所有打印,之后我可以運行ps aux |。 grep ipython並看到很多過程。 看來這些工人還活着。

也許我在做錯事,但是如何使這些過程在完成任務時終止? 如果我想一一產生很多工人(例如,通過獲取一些rmq消息),應該使用哪種方法?

聲明池時,池會生成工作進程。 在游泳池關閉之前,他們不會被殺死。 相反,他們等待在那里等待更多工作出現在隊列中。

如果將代碼更改為:

r = pool.map_async(f, [1,2,3,4,5,6,7,8,9,10])
pool.close()
pool.join()
print "check ps ax now"
sleep (10)

您將看到池進程已消失。

另一件事,在聲明池之后,程序可能無法按聲明函數f的預期方式工作。 我必須更改pool = multiprocessing.Pool(4)以遵循函數f的聲明,但這在Python版本之間可能有所不同。 無論如何,如果您遇到奇怪的“模塊沒有屬性” -exceptions,這就是原因。

漢奴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM