我有一个简单的要求,当一个事件发生时,一个线程被创建并在醒来之前休眠x分钟以执行其任务并终止。
但是如果发生另一个事件,任何正在休眠的线程都应该被终止,并且应该为同一目的产生一个新的线程。
在python中我认为让线程睡眠的最好方法是,
import time
time.sleep(x*60)
有没有办法学习线程的状态(当前正在休眠/空闲或活着)?
答案 0 :(得分:2)
由于线程处于活动状态(正在运行)与否,因此实际上无法做到这一点。从技术上讲,即使它在睡觉它仍在运行/活着它只是没有做任何事情。
一般情况下,在线程中使用睡眠并不是理想的,因为调整睡眠时间和/或在需要它时可以将其唤醒可能会很痛苦。
我过去用过的一件事就是线程模块中的Condition。这允许你把一个线程放到" sleep"通过调用.wait()。然后你可以使用.acquire(false)查看它是否被阻止,然后.acquire()。notify()。release()如果你需要再次唤醒它。
它是一种简单的方法来保持一个线程和旋转或使用疯狂的睡眠范例。
另一个好的选择就是让线程在阻塞队列(python中的队列模块)中消耗一段时间,这将在技术上管理所有这些。
答案 1 :(得分:0)
如果您使用time.sleep
之类的内容,则可以将变量设置为False
,并在线程“清醒”后更改为True
。
class MyThread(Thread):
def __init__(self):
self.awake = False
def run(self):
time.sleep(x*60)
self.awake = True
def is_sleeping(self):
return not self.awake() and self.isAlive() # You need to know also if you already started the thread
然后你可以:
if (some_thread.is_sleeping()):
# more code here.
注意:正如Luke Wahlmeier指出的那样,自从thread.start()
线程正在运行。如果命中一行time.sleep(10)
它仍在运行,但现在正在计算到10秒。这段代码的作用是检查线程执行是否已达到某个执行点(在这种情况下是睡眠之后的行)。