Python 多进程;无限进程

0 投票
1 回答
816 浏览
提问于 2025-04-18 04:35

我在主 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

这里的区别主要在于 if __name__ == ... 这一行。在Windows系统上,多进程的处理方式有点像小技巧,它是通过创建新的进程并在每个进程中重新导入代码来工作的。我想你是从另一个模块的最上层调用 test(path) 的。这个函数里的检查 if __name__ == 'read_DataFiles': 是没什么意义的:这个条件总是成立,这就意味着它总是会启动一个新的进程池。你应该做的是在主脚本中使用 if __name__ == '__main__',只有在这种情况下才调用 test(path)

撰写回答