如何解决Python 加入超时 = 0
我找到了以下代码行:
thread.join(timeout=0.0)
应用于 threading.Thread
对象。
这样一行的目的是什么?
编辑:我的问题特指timeout=0
。将 join
与 timeout=0
一起使用有什么目的吗?我的理解是 join
旨在等待,因此使用 timeout=0
似乎有点矛盾。
解决方法
超时基本上是指join
线程结束的时间。因此,一个 thread.join(timeout=0.0) 将在 0 秒后结束。但是,在关闭之前,thread.join(timeout=1.0) 将运行一秒钟。现在,如果超时到期后线程仍在运行,则 join 调用结束,但线程继续运行。
至于 .join()
它是导致主线程等待您的线程完成的原因。否则,您的线程将自行运行。
因此,将 .join()
视为主线程上的“保持”的一种方式 - 它在主线程可以继续之前,将您的线程解除线程并在主线程中按顺序执行。它确保您的线程在主线程向前移动之前完成。请注意,这意味着如果您的线程在您调用 .join()
之前已经完成是可以的——当调用 .join()
时,主线程会立即释放。
threading
文档对此进行了很好的解释:
当存在 timeout
参数而不是 None
时,它应该是一个浮点数,以秒(或其分数)为单位指定操作超时。由于 join()
总是返回 None
,因此您必须在 is_alive()
之后调用 join()
来决定是否发生超时 - 如果线程仍然存在,则 join()
调用计时出来。
本质上,timeout
参数告诉 join()
等待线程完成多长时间。如果 timeout
指定的时间长度到期,join()
调用将结束,但线程将继续运行。这就是为什么您需要调用 is_alive()
来检查线程是否仍在运行。
将 timeout
参数设置为 0.0
会在超时前等待 0.0 秒,因此会立即超时。所以要回答你的问题,不,调用 join()
和传递 0.0
真的没有任何意义,因为没有等待。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。