0
我注意到這種行爲在python池分配。即使我在池中有20個進程,但是當我爲8個進程執行map_async時,我不會執行所有進程,而只會執行4個進程。當那4個完成時,它再發送兩個,然後當這兩個完成時發送一個。多處理 - 池分配
當我拋出20多個數據時,它會全部運行20次,直到隊列中開始少於20個時,重複上述行爲。
我認爲這是有意完成的,但看起來很奇怪。我的目標是儘快處理請求,顯然這種行爲不適合。
使用Python 2.6 billiard爲maxtasksperchild支持
任何想法我怎麼能提高呢?
代碼:
mypool = pool.Pool(processes=settings['num-processes'], initializer=StartChild, maxtasksperchild=10)
while True:
lines = DbData.GetAll()
if len(lines) > 0:
print 'Starting to process: ', len(lines), ' urls'
Res = mypool.map_async(RunChild, lines)
Returns = Res.get(None)
print 'Pool returns: ', idx, Returns
else:
time.sleep(0.5)
謝謝,這有助於改進我的腳本。我擺脫了默認池處理,並根據您的示例實施了我自己的處理。 – SorinV 2012-04-30 03:29:16