23

os.fork()windows下不支持命令,并给出以下错误:

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

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

为了让您有更广阔的视野,我正在尝试在 Windows 上使用该rq模块redis queue。最终我将在 Heroku 服务器上运行代码,这是一台 Linux 机器,但在开发 Web 应用程序期间,我使用的是 Windows。

4

3 回答 3

12

没有简单的方法可以fork()在没有它的系统上进行模拟,例如 Windows。如果代码仅用于fork()启动新进程exec,您可以将其移植到使用subprocess. 但在 rq 中似乎并非如此,因此您有多种选择:

  1. 移植rq到 Windows,或请他人为您完成。移植调用的部分代码的最简单方法fork()可能是使用multiprocessing模块。但是,您仍然需要替换依赖于 Unix 的代码的其他部分,例如模块signal.alarm()中的使用。timeouts

  2. 在 Cygwin 下使用 Python,它模拟了一个全功能的(虽然速度很慢)fork(),所以 Cygwin Python 有一个工作的os.fork(). 请注意,要获得os.fork(),您将需要使用 Cygwin 构建的 Python,例如 Cygwin 提供的 Python,而不是简单地在 Cygwin 下运行普通的 Windows Python。

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

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

于 2013-06-25T15:10:52.677 回答
1

在 Windows 上,您可以使用 python 安装 cygwin。此 python 安装将具有支持 os.fork() 调用的 os 模块。

于 2018-05-10T09:51:32.767 回答
0

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

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

于 2013-06-25T15:02:57.607 回答