首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows环境下设置python多进程

如何在Windows环境下设置python多进程
EN

Stack Overflow用户
提问于 2018-12-22 01:40:52
回答 1查看 3.4K关注 0票数 1

我正在使用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模块。

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

代码语言:javascript
复制
from multiprocessing import Process

def foo():
    print('hello')

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

我尝试过了,不管有没有if __name__ == "__main__":

我不断地发现错误:

代码语言:javascript
复制
OSError: [Errno 22] Invalid argument: 'C:\\Users\\pboswell003\\PwC_Projects\\anonymize_SAP\\anonymization\\SAP\\<input>'

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-22 01:51:17

你很可能是通过交互式解释器来完成这个任务的。

  1. 不要使用multiprocessing模块在Windows上这样做(或者根本不这么做);编写一个简短的脚本,使用它(或者使用线程,这没有分叉模拟问题)
  2. if __name__ == '__main__':保护在Windows上是不可选的,没有它就会发生可怕的事情。它必须存在,并且必须防止Process的任何发布(包括通过Pool);没有防护的顶级Process发布是个坏主意。这是一个独特的Windows问题,因为Windows上使用的分叉模拟依赖于这个保护程序来允许它在每个子进程中重新初始化__main__模块的状态,模拟一个分叉;如果保护程序不存在,您将试图创建更多的子进程,这会产生更多的子进程,等等。这是一个进程生成炸弹,不要这样做。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53892426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档