【问题标题】:how to run python script with os.fork on windows?如何在 Windows 上使用 os.fork 运行 python 脚本?
【发布时间】:2013-06-22 10:33:38
【问题描述】:

os.fork()命令在windows下不支持,报如下错误:

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

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

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

【问题讨论】:

  • 如果您打算在 Linux 上进行部署,那么在 Linux 上进行开发会更容易。如果您不能/不会安装 Linux,那么至少在您的 Windows 机器上安装 Cygwin,这将允许您安装支持 os.fork() 的 Python 版本。
  • @Aya - 这听起来很容易,但我不确定如何移动整个 'heroku'、'git'、'foreman'、'virtualenv' 以使用不同的 python 版本。有多容易?你能详细说明一下吗?
  • @zenpoy "Version" 这里不是指不同的版本号,而是指不同的版本。为 Cygwin 构建的 Python 很可能可以与 heroku、git 等一起使用。唯一的问题是,鉴于您缺乏使用 Cygwin 的经验,在这样的设置中您会遇到多少其他问题。
  • @zenpoy 好吧,您可能必须使用您的 PATH 环境变量,以便它选择正确的版本,例如C:\cygwin\bin\python.exe 而不是 C:\Program Files\Python\python.exe

标签: python compatibility


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我已经打开了一个问题。我现在正在尝试解决它。​​
      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多