调用start()后,isAlive()能否立即返回False,因为线程尚未启动?

dsp*_*pyz 5 python multithreading race-condition

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

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

但是然后start()方法说:

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

这是否意味着如果我打电话t.start()然后立即检查t.isAlive()它可能我得到False因为线程还没有开始?

Tim*_*ers 6

它不可能发生,至少在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()
Run Code Online (Sandbox Code Playgroud)

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

    self._started.wait()
Run Code Online (Sandbox Code Playgroud)

在内部的结束块Event.引导代码_started Event在调用之前不久设置run(),并且同一事件的状态是主要的事情isAlive().