Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 螺纹';s为活动方法未返回准确状态_Python_Python 3.x_Multithreading_Python Multithreading - Fatal编程技术网

Python 螺纹';s为活动方法未返回准确状态

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

我想使用一个线程来设置监视器,该线程向一组已注册的侦听器报告更新。我正在使用threading.Thread。线程应该在注册第一个侦听器时启动,第二个侦听器和正在进行的侦听器刚刚被添加到侦听器列表中。 我面临的情况是,在start()方法之后不久调用it时,is_alive()返回错误的状态。如何检索正确的队列或运行状态

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()