Python多处理;无限过程

时间:2014-04-28 14:04:58

标签: python multiprocessing pool infinite

我的主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)  

不会停止工作,它会继续创建新流程。有人看到我做错了吗?

1 个答案:

答案 0 :(得分:0)

差异在if __name__ == ...左右。在Windows上,多处理是一种破解,它通过创建新进程并在每个进程中重新导入代码来实现。我确定您从另一个模块的顶层调用test(path)。检查此函数if __name__ == 'read_DataFiles':是没有意义的:这总是正确的,这意味着它将始终启动一个新池。您想要的是使用主脚本中的if __name__ == '__main__',如果是这种情况,则只调用test(path)