如何在Windows上设置python多重处理

时间:2018-12-22 01:40:53

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

我正在使用multiprocessing中的Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32模块。

我正在尝试使用在线找到的最简单的玩具代码:

from multiprocessing import Process

def foo():
    print('hello')

p = Process(target=foo)
p.start()

无论有没有if __name__ == "__main__":

,我都尝试过

我不断收到错误消息:

OSError: [Errno 22] Invalid argument: 'C:\\Users\\pboswell003\\PwC_Projects\\anonymize_SAP\\anonymization\\SAP\\<input>'

我很困惑<input>部分应该是什么,以及它到底想打开什么文件。

更新:我已经接受@ShadowRanger的建议,并尝试从脚本运行。现在,我遇到了无法调试正在发生的事情的问题。也就是说,似乎什么也没发生。如果我在函数中添加time.sleep(10),该脚本将在同一时间执行,从而使我相信不会产生和使用这些工作程序。

新问题:从命令行界面运行脚本时,如何交互测试代码并查看工作线程的结果?

1 个答案:

答案 0 :(得分:2)

您可能是通过交互式解释器执行此操作的。

  1. 请勿在Windows上使用multiprocessing模块执行此操作(或根本不执行);编写一个简短的脚本,使用它(或使用没有分叉模拟问题的线程)
  2. 在Windows上if __name__ == '__main__':防护不是可选的;没有它,可怕的事情将会发生。它必须存在,并且必须防止Process的任何启动(包括通过Pool的启动);不受保护的顶级Process发射是想法。这是Windows特有的问题,因为Windows上使用的派生模拟依靠该防护来允许它在每个子进程中重新初始化__main__模块的状态,从而模拟派生。如果没有警卫,那么您最终将尝试创建该子进程的更多子进程,从而创建更多子进程,等等。这是一个进程生成炸弹,请不要这样做。