我在一个线程中使用psutil
库,定期发布我的CPU使用情况统计信息。这是一个片段:
class InformationThread(threading.Thread):
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self)
def run(self):
while True:
cpu = psutil.cpu_percent(interval=600) #this is a blocking call
print cpu
我需要停止这个帖子,但我似乎无法理解如何。方法cpu_percent
是一个阻塞函数,将阻塞600秒。
我一直在挖掘,我看到的所有示例都依赖于一个紧密循环来检查一个标志,看看是否应该中断循环,但在这种情况下,我不确定如何杀死该线程。 / p>
答案 0 :(得分:2)
将interval设置为0.0并实现更紧密的内循环,您可以在其中检查您的线程是否应该终止。计算时间并不困难,因此调用cpu_percent()
之间经过的时间与600大致相同。
答案 1 :(得分:0)
您可以向stop()
类添加InformationThread
方法,以终止其run()
循环,如下所示。但请注意,它不会取消阻止正在进行的cpu_percent()
来电。
class InformationThread(threading.Thread):
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self)
self.daemon = True # OK for main to exit even if instance still running
self.running = False
self.status_lock = threading.Lock()
def run(self):
with self.status_lock:
self.running = True
while True:
with self.status_lock:
if not self.running:
break
cpu = psutil.cpu_percent(interval=600) # this is a blocking call
print cpu
def stop(self):
with self.status_lock:
self.running = False