>我有一个问题,我试图让 Python 中的一个线程在后台休眠指定的时间。这需要在程序中完成,而不是在命令行级别,因为有数据从Python程序传递到PHP。
import os
from threading import Thread
class getPID(Thread):
def run(self):
print os.getpid()
class waitToKill(Thread):
def run(self):
time.sleep(25) #This is the sleep that needs to be done in the background
os.system('pkill process')
getPID().start()
waitToKill().start()
这个概念是PHP将反复启动Python程序,然后在它命中pkill
语句之前获取PID并杀死进程。当有人离开页面时,Python 程序将启动,但不会终止,从而到达 pkikll
语句并关闭通过进入页面启动的进程。
这和我想象的在 PHP/Python 中制作 Dead Man's Switch 一样简单,但它需要后台睡眠,因为 PHP exec()
函数在后台运行效果不佳,同时仍接收 std 输出。(即 exec(dms.py &)
将挂起 25 秒,然后返回 PID 并显示页面的其余部分)
实现这一目标的最佳方法是什么?应该在time.sleep()
级别还是线程级别?或者是否可以修改 PHP exec()
函数以在后台运行时发送输出?
感谢您提供的任何帮助!
没有必要为此任务使用线程 - 在所有线程退出之前,该过程不会被视为已完成,因此让主线程提前完成没有任何好处。
您必须执行以下操作之一:
- 从 PHP 执行脚本,使其不必等待进程完成(请参阅:php 执行后台进程)
- 分叉 python 进程或以其他方式启动一个新的 python 进程,以便原始进程可以快速退出