为什么python脚本在主进程退出后挂起

Why python script hangs after the main process exited

我在一个函数中有一些耗时的任务,我希望这个函数在主进程退出后也能运行。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
def do_time_consuming_thing():
    // do time consuming task here
    time.sleep(30)

def worker():
    print"start a child process:"
    p = multiprocessing.Process(target=do_time_consuming_thing,args=())
    p.start()
    print"child pid:%d" % p.pid
    sys.exit(0) // main process exit here.

def test():
    worker()

但是,当我在shell命令行中运行上述代码时,在子进程完成之前,我不能返回到命令行提示符。

如何在sys.exit(0)完成后立即返回命令行提示。


尝试在p.start()之前设置p.daemon = True。请看这里。


在代码中,替换退出行

1
sys.exit(0)

用这个:

1
os._exit(0)

从python文档中:

os._exit(n)

Exit the process with status n, without calling cleanup handlers, flushing stdio buffers, etc.

我不能说我推荐这种方法,但是如果需要使用多处理模块,它会回答您的问题。