ipython和fork()

8 投票
2 回答
1708 浏览
提问于 2025-04-16 17:54

我正在计划写一个Python脚本,这个脚本会用到 os.fork() 来创建很多子进程,进行一些计算。父进程会一直等到所有子进程结束。

不过,有个特别的要求,我需要这个脚本既能在Unix命令行中用 python 运行,也能在 ipython 中用 %run 来运行。

那么,子进程应该以什么方式结束,才能避免回到 ipython 的命令提示符呢?根据我的经验, sys.exit() 似乎不行。

2 个回答

0

在Linux的说法里,为什么不直接在iPython的环境中用exec来启动一个普通的Python解释器,而是要让iPython自己去fork呢?

9

下面的代码似乎可以正常工作:

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() 之后。

撰写回答