我计划编写一个Python脚本,使用os.fork()
创建一堆子进程来执行一些计算。父进程将会被阻塞,直到子进程终止。
问题在于,我需要能够在Unix shell中使用python
和在ipython
中使用%run
运行该脚本。
为了避免回到ipython
命令提示符,子进程应该以何种方式终止?根据我的经验,sys.exit()
做不到这点。
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)
。在fork()
后通常只应该在子进程中使用_exit()
。
exec
一个常规的Python解释器并让它分叉,而不是fork
iPython进程呢?ipython
shell和脚本(包括父进程和子进程)中访问。因此,需要在ipython
中使用fork
。 - NPE
os.fork()
。 - NPE