【问题标题】:ipython and fork()ipython 和 fork()
【发布时间】:2011-08-28 07:54:47
【问题描述】:

我正在计划一个 Python 脚本,它将使用 os.fork() 创建一堆子进程来执行一些计算。父进程将阻塞,直到子进程终止。

问题在于,我需要能够从 Unix shell 使用 python 和从 ipython 使用 %run 运行脚本。

子进程应该以什么方式终止以避免重新进入ipython 命令提示符?根据我的经验,sys.exit() 不会这样做。

【问题讨论】:

  • 使用 subprocess 会比使用 os.fork 更容易吗?
  • 我不明白你的最后一段。子进程终止后您想做什么或 sys.exit() 出了什么问题?
  • @Thomas K:很好的建议,但出于 RAM 使用和性能原因,我正在考虑的解决方案严重依赖 os.fork()
  • @ahmet alp balkan:我希望子进程终止,而不是回到ipython shell。如果您不确定我在说什么,请尝试一下。
  • 该死我在 Mac 上并且没有 Windows -点击.py文件)?

标签: python fork process ipython


【解决方案1】:

以下似乎有效:

import os, sys

child_pid = os.fork()
if child_pid == 0:
  print 'in child'
  os._exit(os.EX_OK)
  print 'hm... wasn''t supposed to get here'
else:
  print 'in parent'

诀窍是使用os._exit() 而不是sys.exit()。该文档包含以下段落:

注意标准的退出方式是 sys.exit(n)_exit() 应该正常 只能在子进程中使用 在 fork() 之后。

【讨论】:

    【解决方案2】:

    在 Linux 术语中,不是forkiPython 进程,为什么不exec 来自 iPython shell 的常规 python 解释器并拥有一个 fork?

    【讨论】:

    • 我有大量的内存数据结构,我需要从交互式ipython shell 和脚本(父进程和子进程)都访问它们。因此从ipython 向下使用fork
    • 使用共享内存怎么样?我从未尝试过 POSH(Python 对象共享),但我听说过关于它的奇迹。然后,您可以按照自己喜欢的方式构建流程。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多