isAlive() 可以在调用 start() 后立即为 False,因为线程尚未启动?



在 http://docs.python.org/2/library/threading.html#thread-objects 的python文档中,它说

[isAlive()] 在 run() 方法

启动之前返回 True,直到 run() 方法终止之后

但是 start() 方法说:

[start()] 安排在单独的控制线程中调用对象的 run() 方法。

这是否意味着如果我调用t.start()然后立即检查t.isAlive()我可能会因为线程尚未启动而False

这不可能发生,至少在CPython的实现中不会。 这来自于盯着代码Thread.start(这里来自Python 3源代码,但没关系):

def start(self):
    ...
    try:
        _start_new_thread(self._bootstrap, ())
    except Exception:
        with _active_limbo_lock:
            del _limbo[self]
        raise
    self._started.wait()

_start_new_thread() 是用 C 语言实现的,启动一个新线程并在该新线程中运行self._bootstrap()self._bootstrap()反过来调用self.run() . 如果这就是它的全部内容,那么调用线程确实可以在run()开始执行之前返回任意时间量。 但是:

    self._started.wait()

在内部Event上的末端块。 引导代码在调用run()之前不久设置_started Event,同一事件的状态是isAlive()查看的主要内容。

相关内容

最新更新