在python 3中,我试图同时运行多个参数的相同函数。我在Windows 7中使用Python 3.5.2,Anaconda 4.1.1(64位)中的多处理。我收到关于spawn.py的以下错误:
尝试在之前启动新流程 当前进程已完成其自举阶段。
这可能意味着你没有使用fork启动你的 孩子的过程,你忘了使用正确的习语 在主要模块中:
T
" freeze_support()"如果程序可以省略行 不会被冻结以生成可执行文件。
我的代码是:
if __name__ == '__main__':
freeze_support()
...
你可以帮我修改我的代码,以便同时运行同一个函数的多个实例吗?谢谢!
答案 0 :(得分:6)
当Windows通过重新导入主模块来模拟分叉时,您需要一个网守测试来防止您的代码再次执行。这就是所有主要模块应该通过if __name__ == '__main__':
网守检查控制其“类似主体”行为的原因。
最简单的解决方案是获取所有“主”代码,将其缩进一级,并定义包含它的名为main
的函数。
main
函数将是:
def main():
# Inputs to the function
passwords=['p0','p1','p2']
ranges=[(1,10),(10,20),(20,30)]
# Creating the list of processes to append
... omitted for brevity ...
# Attempting to run simultaneously. This is where the error occurs:
for p in proc:
p.start()
# Join after all processes started, so you actually get parallelism
for p in proc:
p.join()
然后只需将以下内容添加到文件的末尾:
if __name__ == '__main__':
main()
__name__
检查会阻止在生成工作进程时重新执行主函数。