我正在使用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)
,该脚本将在同一时间执行,从而使我相信不会产生和使用这些工作程序。
新问题:从命令行界面运行脚本时,如何交互测试代码并查看工作线程的结果?
答案 0 :(得分:2)
您可能是通过交互式解释器执行此操作的。
multiprocessing
模块执行此操作(或根本不执行);编写一个简短的脚本,使用它(或使用没有分叉模拟问题的线程)if __name__ == '__main__':
防护不是可选的;没有它,可怕的事情将会发生。它必须存在,并且必须防止Process
的任何启动(包括通过Pool
的启动);不受保护的顶级Process
发射是坏想法。这是Windows特有的问题,因为Windows上使用的派生模拟依靠该防护来允许它在每个子进程中重新初始化__main__
模块的状态,从而模拟派生。如果没有警卫,那么您最终将尝试创建该子进程的更多子进程,从而创建更多子进程,等等。这是一个进程生成炸弹,请不要这样做。