我的主python文件中有一个函数可以进行多处理,效果很好;
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=len(directories))
pool.map(worker, directories)
但是,我从其他目录导入了一个.py文件,我尝试完全相同;
# Main file
import multiprocessing
read_DataFiles.test(os.getcwd())
# Imported file
directories=["x", "x", "x"]
def worker(sample):
File=open('test'+sample+'.bat', 'w')
File.close()
1 == 1
def test(path):
if __name__ == 'read_DataFiles':
pool = multiprocessing.Pool(processes=8)
print pool.map(worker, directories)
不会停止工作,它会继续创建新流程。有人看到我做错了吗?
答案 0 :(得分:0)
差异在if __name__ == ...
左右。在Windows上,多处理是一种破解,它通过创建新进程并在每个进程中重新导入代码来实现。我确定您从另一个模块的顶层调用test(path)
。检查此函数if __name__ == 'read_DataFiles':
是没有意义的:这总是正确的,这意味着它将始终启动一个新池。您想要的是使用主脚本中的if __name__ == '__main__'
,如果是这种情况,则只调用test(path)
。