Python多处理:如果父进程被杀死,子进程是否会挂起?

时间:2013-12-13 19:33:55

标签: python multiprocessing celery child-process

我需要帮助澄清一些概念。现在我正在使用celery(python调度程序)来运行任务。由于芹菜有一个任务的时间限制(300s应该是默认的)并且我的任务很可能会运行更长时间,所以我决定在该任务中生成一个进程来完成实际的工作。但是,我不知道的是,如果在执行任务期间,我意外地重启/停止了芹菜服务器,那么产生的进程是否仍然有效?或者它会成为一个僵尸进程?如果可能的话,请给我一些细节。谢谢!

编辑:还有一个问题:当你做的时候

p = Process(target=f, args=('test',))
p.start()

p成为当前流程的子流程吗?或者它只是创建一个独立的过程?

1 个答案:

答案 0 :(得分:1)

我担心我只回答你的第一个问题,不熟悉Celery,也许你可以在docs中找到答案。

您的问题突出了守护程序和非守护程序线程之间的区别。

守护程序主题是那些不会挂断主程序的主题。无论主程序在做什么,他们都会继续工作直到完成。

非守护进程线程正好相反。他们必须在主程序结束前被杀死。

This question/answer在解释差异和影响方面做得很好。

在您的问题范围内,如果您的进程是守护程序线程,那么如果您重新启动/停止服务器,它们应该没问题。但是,如果它们不是守护程序线程,则您应该无法停止芹菜服务器(假设我对守护程序线程的理解是正确的)

希望这会有所帮助