在 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()
查看的主要内容。