Windows上的Python多处理RuntimeError
我有一个类函数(让我们称之为“alpha.py”),它使用多处理(processes = 2)来分叉一个进程,并且是我编写的
Python包的一部分.在一个单独的Python脚本中(我们称之为“beta.py”),我从这个类中实例化了一个对象并调用了使用多处理的相应函数.最后,所有这些都包含在一个包装Python脚本(让我们称之为“gamma.py”)中,它处理许多不同的类对象和函数.
实质上: >从命令行运行./gamma.py 这在Mac或Linux上运行没有问题.但是,它在Windows机器上成为一个问题,错误(和文档)表明我应该在某处写这个: if __name__ == '__main__': freeze_support() This other post也提到做同样的事情. 但是,我不确切知道这两行应该驻留在哪里.目前,alpha.py,beta.py或gamma.py都不包含if __name__ ==’__ main__’:部分.如果有人可以告诉我这两行应该去哪里以及它背后的基本原理,那将是很棒的.
实际上,这里不需要freeze_support().您会收到RuntimeError,因为您在beta模块的顶层创建并启动了新流程.
当在Windows上使用多处理创建新进程时,将在此进程中启动新的Python解释器,并尝试使用应执行的目标函数导入模块.这是您的测试版模块.现在,当您导入它时,应执行所有顶级语句,这将导致创建并重新启动新进程.然后,递归地,来自该过程的另一个过程,依此类推. 这很可能不是您想要的,因此当您使用子进程直接运行beta.py时,应该初始化新进程并仅启动一次. if __name__ ==’__ main__’:应该放在beta.py中,然后在本节中移动初始化并启动新进程的代码.之后,当导入beta.py并且不直接运行时,将不会启动任何新进程,您将看不到任何副作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 批处理文件 – cmd / DOS批处理脚本中变量周围的方括号表示
- windows-server-2008 – 具有3台服务器的高可用性:虚拟化与
- windows – 如何在批处理中找到特定文件名并切换到该目录?
- Win10系统,QQ截图时画面变大的解决方法
- windows-server-2008 – 用户从文件/文件夹权限中删除管理员
- Windows Shell扩展教程
- 如何断开用户使用PowerShell访问Windows共享文件夹的连接
- Windows出现在屏幕边缘(Delphi)
- Windows 7 – 如何在Windows 7上安装IE10后修复Visual Stud
- Office 365 – 垃圾邮件过滤的“敏感词列表”中有什么?
- Windows – .NET Core发布错误:“无法找到msdep
- windows-phone-8.1 – 如何检测在Windows 10 Mob
- Windows Server2008RFTP隔离账户的搭建
- win10 uwp 使用 Matrix3DProjection 进行 3d 投影
- windows-server-2003 – 在Windows 2003服务器上
- windows-phone-7 – 来自代码的本地Toast通知
- mfc – 如何启用AfxMessageBox是/否(MB_YESNO)“
- windows下GNS3的环境搭建+两种连接交换机互联互通
- Microsoft Azure定价 – 什么构成出站流量?
- powershell – echo [uint32] :: maxvalue说’ui