我是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