2

我有一个长时间运行的 python 函数,作为 http 请求处理程序的一部分执行(它与表单上选择的各种选项相关联)。

http 请求处理程序等待函数完成执行,然后将适当的响应返回给发起者。

但是,由于函数可能需要一些时间来执行,因此请求可能会在这段时间内被中断 - 导致请求处理程序死亡,并中断长时间运行的函数的执行。这是不可取的 - 我宁愿确保每次调用该函数时都完成执行。

我玩过使用子进程,但它们似乎在请求处理程序完成时就死了。

我可以/如何在一个单独的线程或进程中触发该函数,表明它应该被允许比它的父进程更长寿吗?


守护进程似乎可以部分解决我的问题 - 他们可以比他们的父母长寿?- 但我仍然希望父进程监视/访问子进程的结果。

那是:

  • 父进程可能在子进程之前死亡。在这种情况下,我希望子进程完成
  • 只要父进程还活着,我希望它能够访问子进程,监视它等等......如果父进程没有死,我希望它能够访问孩子正在做的处理的结果。
4

1 回答 1

1

如果将处理程序作为新线程启动,则可以将它们作为守护进程运行,即使主线程存在,它们也会继续运行。主线程不是守护线程,因此需要在启动子线程之前显式设置此属性。

从手册:

可以将线程标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个 Python 程序就退出了。初始值继承自创建线程。可以通过 daemon 属性设置标志。

注意:守护线程在关闭时突然停止。它们的资源(如打开的文件、数据库事务等)可能无法正常释放。如果您希望线程优雅地停止,请将它们设为非守护进程并使用合适的信号机制,例如事件。

于 2013-09-19T17:58:38.850 回答