微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 加入超时 = 0

如何解决Python 加入超时 = 0

我正在编写一个我没有自己编写的代码

我找到了以下代码行: thread.join(timeout=0.0) 应用于 threading.Thread 对象。

这样一行的目的是什么?

编辑:我的问题特指timeout=0。将 jointimeout=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 举报,一经查实,本站将立刻删除。