我是Python和多處理的新手。我想批量轉換一堆文件,所以我想我會嘗試多處理。 Pool和map()概念看起來很簡單,但似乎不起作用。我已經將它縮減到了下面的測試程序,但其要點是:它會經歷4次迭代(池中的每個進程)並在此之後掛起。以下是測試代碼:Pool.map在4次迭代後掛起
import multiprocessing, logging
import os
import sys
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
def chill(t):
cmd = '/bin/sleep'
args = (cmd,str(t))
print >>sys.stderr, os.getpid(), args
os.execv(cmd, args)
if __name__ == "__main__" :
times = [ 1 ] * 100
pool = multiprocessing.Pool(1) # change this for more processes
pool.map(chill, times)
pool.close()
pool.join()
當我運行它時,它在第4次迭代後掛起。增加進程數量只會使進程數量增加4倍。這個「4」有什麼神奇的,我做錯了什麼?
'os.execv'替換子進程後。你不想這樣做。嘗試'subprocess.call(['/ bin/sleep',str(t)])''。 – tdelaney 2014-12-05 01:50:50
但是第一次通話後它會死掉,不是嗎? – Groot 2014-12-05 02:21:00
我不確定,可能有一些恢復協議。 – tdelaney 2014-12-05 03:33:00