如何在Windows上使用os.fork运行python脚本?

时间:2013-06-25 14:48:29

标签: python compatibility

Windows下不支持

os.fork()命令,并出现以下错误:

AttributeError: 'module' object has no attribute 'fork'

所以一般的问题是如何在Windows下运行包含os.fork()调用的脚本?。我不介意使用只会模仿行为并且运行速度慢得多的东西,它只用于测试。我也不想更改脚本,因为它是第三方模块。

为了给您更广阔的视角,我正在尝试在Windows上使用模块rq a.k.a redis queue。最终我将在Linux机器的heroku服务器上运行代码,但在开发Web应用程序期间,我正在使用Windows。

3 个答案:

答案 0 :(得分:8)

没有简单的方法可以在没有它的系统上模拟fork(),例如Windows。如果代码仅使用fork()开始使用exec的新流程,则可以将其移植到使用subprocess。但是这个doesn't appear to be the case在rq中,所以你有几个选择:

  1. rq端口发送到Windows,或让别人为您执行此操作。移植调用fork()的代码部分的最简单方法可能是使用multiprocessing模块。但是,您仍然需要替换依赖于Unix的代码的其他部分,例如在signal.alarm()模块中使用timeouts

  2. 在Cygwin下使用Python,它模拟一个功能齐全(虽然很慢)的fork(),因此Cygwin Python有一个有效的os.fork()。请注意,要获得os.fork(),您需要使用Cygwin构建的Python,例如Cygwin提供的Python,而 not 只需在Cygwin下运行正常的Windows Python。

  3. 在虚拟机中运行的Linux上测试应用程序。

  4. 在这些不愉快的选择中,我推荐最后一个。

答案 1 :(得分:0)

导入一个包装器,它有条件地将相应的子进程调用包装在一个名为fork的函数中,并将其添加到os命名空间。

可能可以选择与供应商联系并指出os.fork不是您的首选方案。

答案 2 :(得分:0)

在Windows上,你可以用python安装cygwin。这个python安装将有os模块,它将支持os.fork()调用。