【问题标题】:Python Multiprocessing; Infinite ProcessesPython多处理;无限进程
【发布时间】:2014-04-28 14:04:57
【问题描述】:

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

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

【问题讨论】:

    标签: python multiprocessing pool infinite


    【解决方案1】:

    区别在于if __name__ == ...。在 Windows 上,多处理是一种 hack,它通过创建新进程并重新导入每个进程中的代码来工作。我确定您从另一个模块的顶层调用test(path)。这个函数if __name__ == 'read_DataFiles': 的检查是没有意义的:这总是正确的,这意味着它总是会启动一个新池。你想要的是使用主脚本中的if __name__ == '__main__',并且只有在这种情况下才调用test(path)

    【讨论】:

    • 我认为这是有道理的。我明天将尝试实施它。谢谢!
    猜你喜欢
    • 2013-12-01
    • 2014-06-07
    • 2016-12-27
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多