Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程在数据库中的看门狗时间?_Python_Multithreading_Timer_Watchdog - Fatal编程技术网

Python 线程在数据库中的看门狗时间?

Python 线程在数据库中的看门狗时间?,python,multithreading,timer,watchdog,Python,Multithreading,Timer,Watchdog,我有一个程序,它从一个名为daemon.py的python脚本启动,这个daemon脚本启动4个线程,这些线程在程序运行的整个过程中都是活动的 我想使用初始守护程序作为其他线程的看门狗。我认为每个线程在sqlite数据库中都有自己的时间,守护进程会倒计时。线程的任务是重置自己的计时器。如果任何计时器将其设置为0,则守护进程将重新启动所有内容 这是一个很好的方法吗?如果没有,我该怎么做呢?您的方法在高层次上似乎是有效的,尽管没有关于4个线程功能的更多细节,很难确定。主线程可以通过修改线程的实例变量

我有一个程序,它从一个名为daemon.py的python脚本启动,这个daemon脚本启动4个线程,这些线程在程序运行的整个过程中都是活动的

我想使用初始守护程序作为其他线程的看门狗。我认为每个线程在sqlite数据库中都有自己的时间,守护进程会倒计时。线程的任务是重置自己的计时器。如果任何计时器将其设置为0,则守护进程将重新启动所有内容


这是一个很好的方法吗?如果没有,我该怎么做呢?

您的方法在高层次上似乎是有效的,尽管没有关于4个线程功能的更多细节,很难确定。主线程可以通过修改线程的实例变量为4个线程提供指导。您不需要将数据库用作通信机制。Python有一些有用的线程特性,可以为您解决大部分问题

此外,听起来您希望线程超时或在一段时间后消失,然后重新创建。要实现这一点,您可以让4个线程中的每个线程重置一个实例变量,如
last\u active
,主线程可以使用该信息对线程进行相应的操作。在python中没有简单的方法可以杀死任意线程。我的首选方法如下:

def run():
    while not self.kill_requested:
        ...

启动的线程应该永远不会死,看门狗功能就在那里,以防出现错误,线程崩溃或挂起。你在说什么python线程特性,队列?看门狗可以定期检查这4个线程,看看是否还有线程在运行。如果其中一个崩溃了,看门狗可以重新启动它。如果一根线挂起来,它会更硬。解锁可以终止的进程,在python中无法向线程发送终止信号。队列是一种机制,但存在事件和计时器对象。我会确保我的线程在所有IO操作(如HTTP调用或数据库调用)上都有超时。线程可能会跟踪最近超时的次数,看门狗可以对此进行查询,并确定线程是否需要重新启动。