Skip to main content
 首页 » 编程设计

python之如何允许长时间运行的 python 函数在其父函数终止后继续执行

2025年05月04日13小虾米

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

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

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

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

我能否/如何在单独的线程或进程中触发该函数,以表明它应该被允许比其父进程存活更久?


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

即:

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

请您参考如下方法:

如果您将处理程序作为新的 threads 启动,您可以将它们作为 daemons 运行即使主线程存在,它们也会运行。主线程不是守护线程,因此需要在启动子线程之前明确为其子线程设置此属性。

来自手册:

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

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