Python 螺纹';s为活动方法未返回准确状态
我想使用一个线程来设置监视器,该线程向一组已注册的侦听器报告更新。我正在使用threading.Thread。线程应该在注册第一个侦听器时启动,第二个侦听器和正在进行的侦听器刚刚被添加到侦听器列表中。 我面临的情况是,在start()方法之后不久调用it时,is_alive()返回错误的状态。如何检索正确的队列或运行状态Python 螺纹';s为活动方法未返回准确状态,python,python-3.x,multithreading,python-multithreading,Python,Python 3.x,Multithreading,Python Multithreading,我想使用一个线程来设置监视器,该线程向一组已注册的侦听器报告更新。我正在使用threading.Thread。线程应该在注册第一个侦听器时启动,第二个侦听器和正在进行的侦听器刚刚被添加到侦听器列表中。 我面临的情况是,在start()方法之后不久调用it时,is_alive()返回错误的状态。如何检索正确的队列或运行状态 import threading import time from datetime import datetime class SomeTaskMonitor(threa
import threading
import time
from datetime import datetime
class SomeTaskMonitor(threading.Thread):
__instance = None
__listenerList = []
def __new__(cls, *args, **kwargs):
"""
starts separate thread for monitoring the bus
"""
if SomeTaskMonitor.__instance is None:
SomeTaskMonitor.__instance = object.__new__(cls)
return SomeTaskMonitor.__instance
def run(self) -> None:
while True:
time.sleep(5)
# normally list of listeners would be checked here for a match and callback initiated
print("{0} - some event".format(datetime.now()))
@staticmethod
def addListener():
if not SomeTaskMonitor().is_alive():
SomeTaskMonitor().start()
if __name__ == '__main__':
# for ease of read not adding listener here but calling class twice
SomeTaskMonitor().addListener()
SomeTaskMonitor().addListener()
上述代码产生以下输出(请参阅由于第二个侦听器注册而产生的重复输出):
感谢您的评论或建议 我仍在寻找上述编码和相关问题的答案,为什么_alive()返回值不能反映排队或启动线程的当前状态。 不过,目前我正在使用以下适合我需要的变通方法。希望对其他面临同样问题的人有所帮助:
@staticmethod
def addListener():
if len(listenerList) == 0:
SomeTaskMonitor().start()
listenerList.append(listener)
#if not SomeTaskMonitor().is_alive():
# SomeTaskMonitor().start()
@staticmethod
def addListener():
if len(listenerList) == 0:
SomeTaskMonitor().start()
listenerList.append(listener)
#if not SomeTaskMonitor().is_alive():
# SomeTaskMonitor().start()