Python 3 - 使用不同的args处理相同的函数

时间:2017-03-01 02:27:55

标签: python python-3.x multiprocessing python-multiprocessing

在python 3中,我试图同时运行多个参数的相同函数。我在Windows 7中使用Python 3.5.2,Anaconda 4.1.1(64位)中的多处理。我收到关于spawn.py的以下错误:

  

尝试在之前启动新流程   当前进程已完成其自举阶段。

     

这可能意味着你没有使用fork启动你的   孩子的过程,你忘了使用正确的习语   在主要模块中:

T
  

" freeze_support()"如果程序可以省略行   不会被冻结以生成可执行文件。

我的代码是:

if __name__ == '__main__':
    freeze_support()
    ...

你可以帮我修改我的代码,以便同时运行同一个函数的多个实例吗?谢谢!

1 个答案:

答案 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__检查会阻止在生成工作进程时重新执行主函数。