我正在使用Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32中的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)添加到该函数中,脚本就会同时执行,这使我相信这些工作人员不会被生成和使用。
新问题:当我从命令行接口运行脚本时,如何交互地测试我的代码并查看工作线程的结果?
发布于 2018-12-22 01:51:17
你很可能是通过交互式解释器来完成这个任务的。
multiprocessing模块在Windows上这样做(或者根本不这么做);编写一个简短的脚本,使用它(或者使用线程,这没有分叉模拟问题)if __name__ == '__main__':保护在Windows上是不可选的,没有它就会发生可怕的事情。它必须存在,并且必须防止Process的任何发布(包括通过Pool);没有防护的顶级Process发布是个坏主意。这是一个独特的Windows问题,因为Windows上使用的分叉模拟依赖于这个保护程序来允许它在每个子进程中重新初始化__main__模块的状态,模拟一个分叉;如果保护程序不存在,您将试图创建更多的子进程,这会产生更多的子进程,等等。这是一个进程生成炸弹,不要这样做。https://stackoverflow.com/questions/53892426
复制相似问题