我有一个长期运行的 python 函数,作为 http 请求处理程序的一部分执行(它与表单上选择的各种选项相关联)。
http 请求处理程序等待函数完成执行,然后将适当的响应返回给发起者。
但是,由于该函数可能需要一些时间才能执行,请求可能会在那段时间内被中断 - 导致请求处理程序终止,并中断长时间运行的函数的执行。这是不可取的 - 我宁愿确保函数在每次调用时都完成执行。
我玩过使用子进程,但它们似乎在请求处理程序结束时就结束了。
我能否/如何在单独的线程或进程中触发该函数,以表明它应该被允许比其父进程存活更久?
守护进程似乎可以部分解决我的问题 - 他们可以比他们的 parent 活得更久? - 但我仍然希望父进程监视/访问子进程的结果。
即:
- 父进程可能先于子进程死亡。在这种情况下,我希望子进程能够完成
- 只要父进程还活着,我希望它能够访问子进程,监视它等等...如果父进程没有死,我希望它可以访问 child 正在进行的处理的结果。
请您参考如下方法:
如果您将处理程序作为新的 threads 启动,您可以将它们作为 daemons 运行即使主线程存在,它们也会运行。主线程不是守护线程,因此需要在启动子线程之前明确为其子线程设置此属性。
来自手册:
线程可以被标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个Python程序就退出了。初始值继承自创建线程。可以通过守护程序属性设置标志。
注意: 守护线程在关闭时突然停止。它们的资源(如打开的文件、数据库事务等)可能无法正常释放。如果您希望您的线程正常停止,请将它们设置为非守护进程并使用合适的信号机制,例如事件。
