gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:01:50 26 4
gpt4 key购买 nike

http://docs.python.org/2/library/threading.html#thread-objects 处的 python 文档中上面写着

[isAlive()] returns True just before the run() method starts until just after the run() method terminates

但是 start() 方法表示:

[start()] arranges for the object’s run() method to be invoked in a separate thread of control.

这是否意味着如果我调用 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 的末尾 block 。 Bootstrap 代码在调用 run() 之前不久设置 _started Event,并且同一事件的状态是主要的 isAlive () 看。

关于python - isAlive() 是否可以在调用 start() 后立即为 False 因为线程尚未启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21973088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com