ipython和fork()
我正在计划写一个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()
之后。