在http://docs.python.org/2/library/threading.html#thread-objects的python文档中,它说
[isAlive()]在run()方法启动之前返回True,直到run()方法终止后
然后start()方法说:
[start()]安排在单独的控制线程中调用对象的run()方法。
这是否意味着如果我致电t.start()
,然后立即检查t.isAlive()
我可能会False
,因为线程尚未启动?
答案 0 :(得分: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()
_start_new_thread()
在C中实现,启动一个新线程并在该新线程中运行self._bootstrap()
。 self._bootstrap()
反过来调用self.run()
。如果这就是全部,那么调用线程确实可以在run()
开始执行之前返回任意时间量。但是:
self._started.wait()
在内部Event
的结尾处。引导代码在调用_started
之前不久设置Event
run()
,同一事件的状态是isAlive()
查看的主要内容。