我正在研究一个我自己没有写的代码。
我找到了以下代码行:thread.join(timeout=0.0)
应用于threading.Thread
对象。
这样一条线的目的是什么?
编辑:我的问题特别提到timeout=0
。使用带有timeout=0
的join
有什么目的吗?我的理解是,join
目的是等待,因此使用timeout=0
似乎有点矛盾。
超时基本上是指join
线程结束的时间。因此,thread.join(timeout=0.0) 将在 0 秒后结束。但是,thread.join(timeout=1.0) 将在关闭之前运行一秒钟。现在,如果线程在超时到期后仍在运行,则加入调用结束,但线程继续运行。
至于.join()
,这是导致主线程等待线程完成的原因。否则,您的线程将自行运行。
所以一种方式来思考.join()
作为主线程上的"保持"——它会解除线程的线程,并在主线程中按顺序执行,然后主线程才能继续。它确保您的线程在主线程向前移动之前完成。请注意,这意味着如果您的线程在调用.join()
之前已经完成,则可以 - 主线程只是在调用.join()
时立即释放。
threading
文档很好地解释了它:
当
timeout
参数存在且未None
时,它应该是一个浮点数,指定操作的超时(以秒为单位)(或其分数)。由于join()
总是返回None
,因此您必须在join()
后调用is_alive()
以确定是否发生了超时 - 如果线程仍处于活动状态,则join()
调用超时。
实质上,timeout
参数告诉join()
等待线程完成多长时间。如果timeout
规定的时间长度过期,则join()
调用将结束,但线程将继续运行。这就是为什么您需要调用is_alive()
来检查线程是否仍在运行。
将timeout
参数设置为0.0
将在超时前等待 0.0 秒,因此,它将立即超时。所以要回答你的问题,不,打电话给join()
和路过0.0
真的没有意义,因为没有等待。