判断线程是不是已经启动
Posted
技术标签:
【中文标题】判断线程是不是已经启动【英文标题】:Determine if thread has been started判断线程是否已经启动 【发布时间】:2014-02-22 17:45:57 【问题描述】:如何判断一个python线程是否已经启动?有一个方法 is_alive()
但这是真的 before 和 while 线程正在运行。
【问题讨论】:
return self.__started.is_set() and not self.__stopped
应该在开始之前返回 false。来自 doc str 的“就在方法开始之前”意味着然后 __started
已设置但线程尚未运行(我认为时间很短)
【参考方案1】:
您可以查看 Thread 实例的 ident 字段。 Python 2.7 documentation for Threading 将 ident 描述为
此线程的“线程标识符”,如果该线程没有,则为 None 已经开始了。
【讨论】:
【参考方案2】:使用isAlive
(或is_alive
)Thread
类方法。
Python 2.7 http://hg.python.org/cpython/file/2.7/Lib/threading.py#l995
def isAlive(self):
"""Return whether the thread is alive.
This method returns True just before the run() method starts until just
after the run() method terminates. The module function enumerate()
returns a list of all alive threads.
"""
assert self.__initialized, "Thread.__init__() not called"
return self.__started.is_set() and not self.__stopped
Python 3 https://github.com/python/cpython/blob/master/Lib/threading.py
def is_alive(self):
"""Return whether the thread is alive.
This method returns True just before the run() method starts until just
after the run() method terminates. The module function enumerate()
returns a list of all alive threads.
"""
assert self._initialized, "Thread.__init__() not called"
if self._is_stopped or not self._started.is_set():
return False
self._wait_for_tstate_lock(False)
return not self._is_stopped
【讨论】:
【参考方案3】:您可以让线程函数在启动时设置一个布尔标志,然后检查该标志。
【讨论】:
这不是我想要的。线程启动和执行之间总是存在延迟。我想避免这种故障之间。一种可能是重载Thread.start
并设置一个标志。
@Razer 您通常无法避免线程启动和实际执行之间的延迟,并且任何依赖此类事物的设计都被定义为破坏。无论如何,您真的不应该需要这样的标志 - 您要解决的实际问题是什么?以上是关于判断线程是不是已经启动的主要内容,如果未能解决你的问题,请参考以下文章