os.fork()
命令,并出现以下错误:
AttributeError: 'module' object has no attribute 'fork'
所以一般的问题是如何在Windows下运行包含os.fork()
调用的脚本?。我不介意使用只会模仿行为并且运行速度慢得多的东西,它只用于测试。我也不想更改脚本,因为它是第三方模块。
为了给您更广阔的视角,我正在尝试在Windows上使用模块rq
a.k.a redis queue
。最终我将在Linux机器的heroku服务器上运行代码,但在开发Web应用程序期间,我正在使用Windows。
答案 0 :(得分:8)
没有简单的方法可以在没有它的系统上模拟fork()
,例如Windows。如果代码仅使用fork()
开始使用exec
的新流程,则可以将其移植到使用subprocess
。但是这个doesn't appear to be the case在rq中,所以你有几个选择:
将rq
端口发送到Windows,或让别人为您执行此操作。移植调用fork()
的代码部分的最简单方法可能是使用multiprocessing
模块。但是,您仍然需要替换依赖于Unix的代码的其他部分,例如在signal.alarm()
模块中使用timeouts
。
在Cygwin下使用Python,它模拟一个功能齐全(虽然很慢)的fork()
,因此Cygwin Python有一个有效的os.fork()
。请注意,要获得os.fork()
,您需要使用Cygwin构建的Python,例如Cygwin提供的Python,而 not 只需在Cygwin下运行正常的Windows Python。
在虚拟机中运行的Linux上测试应用程序。
在这些不愉快的选择中,我推荐最后一个。
答案 1 :(得分:0)
导入一个包装器,它有条件地将相应的子进程调用包装在一个名为fork的函数中,并将其添加到os命名空间。
可能可以选择与供应商联系并指出os.fork不是您的首选方案。
答案 2 :(得分:0)
在Windows上,你可以用python安装cygwin。这个python安装将有os模块,它将支持os.fork()调用。