【问题标题】:Python multiprocessing: Will child process hang if the parent process was killed?Python多处理:如果父进程被杀死,子进程会挂起吗?
【发布时间】:2013-12-13 19:33:54
【问题描述】:

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

编辑:还有一个问题:什么时候做

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

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

【问题讨论】:

    标签: python multiprocessing celery child-process


    【解决方案1】:

    恐怕只能回答你的第一个问题,对Celery不是很熟悉,或许你可以在docs找到答案。

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

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

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

    This question/answer 很好地解释了差异和含义。

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

    希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 2010-12-02
      • 2010-12-08
      • 2011-09-23
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2011-09-09
      • 2016-06-10
      相关资源
      最近更新 更多