我正在尝试使用多处理来加速文件存档。
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,maxtasksperchild=1)
for file_name in files :
p_output=pool.map(gzip_file,[file_name])
pool.close()
pool.join()
函数gzip_file
执行简单的gzip,记录它是否成功。
我的问题是,在这个脚本的某些运行期间,它会无限期挂起并且看不到机器上的负载。
为每个文件调用pool.map
是不对的?
更新:我已切换到map_async
,但这没有帮助。
当脚本挂起时,现在它一直在发生,子进程变成了僵尸。
这真的很奇怪。
解决方案:此问题是python 2.7.2中与池的maxtasksperchild
参数相关的错误。一旦我删除了这个参数并将其保留为默认值,所有参数都按预期工作。
this thread