python 线程中 join 方法的作用

本文详细介绍了Python中线程的join方法的使用方法及其影响。通过对比带与不带join方法的代码示例,展示了join如何使主线程等待子线程完成后再继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


join 方法:阻塞线程 , 直到该线程执行完毕

因此  ,可以对join加一个超时操作 , join([timeout]),超过设置时间,就不再阻塞线程

jion加上还有一个后果就是, 子线程和主线程绑定在一起 , 直到子线程运行完毕,才开始执行子线程。


代码 有join:

#-*- coding: UTF-8 -*- 


import threading
from time import sleep

def fun():
<span style="white-space:pre">	</span>i= 5
	while i > 0:
		print(111111)
		sleep(10)
<span style="white-space:pre">		</span>i--

if __name__ == '__main__':


	a = threading.Thread(target = fun)
	a.start()
	a.join()
	while True:
		print('aaaaaaa')
		sleep(1)
输出:<pre name="code" class="python">111111 输完之后, 才输出 <span style="font-family: Arial, Helvetica, sans-serif;">aaaaaaa </span>


代码: 无join

#-*- coding: UTF-8 -*- 


import threading
from time import sleep

def fun():
	while True:
		print(111111)
		sleep(10)

if __name__ == '__main__':


	a = threading.Thread(target = fun)
	a.start()
	while True:
		print('aaaaaaa')
		sleep(1)
<pre name="code" class="python" style="font-size:18px;">111111 和 <span style="font-family: Arial, Helvetica, sans-serif;">aaaaaaa  间隔输出</span>





Python 的 `threading` 模块中,`join` 方法用于控制线程的执行顺序。当一个线程调用了 `join` 方法后,调用该方法线程(通常是主线程)会等待直到被调用 `join` 的线程执行完成。 ### 作用 - **同步线程**:`join` 方法确保主线程等待子线程完成后才继续执行。这在需要确保某些代码在子线程执行完毕后才运行时非常有用。 - **防止竞态条件**:通过确保线程执行顺序,可以避免竞态条件(Race Condition),即多个线程同时访问和修改共享资源时可能导致的问题。 ### 使用方式 以下是一个简单的示例,演示如何使用 `join` 方法: ```python import threading import time def worker(): print("Worker thread starting") time.sleep(2) print("Worker thread finished") # 创建线程 thread = threading.Thread(target=worker) # 启动线程 thread.start() # 等待线程完成 thread.join() print("Main thread continues after worker thread") ``` ### 输出结果: ``` Worker thread starting Worker thread finished Main thread continues after worker thread ``` 在这个例子中,主线程调用了 `thread.join()`,因此它会等待 `worker` 线程执行完毕后才继续打印 `"Main thread continues after worker thread"` [^1]。 ### 可选参数 `join` 方法还可以接受一个可选的浮点数参数,表示等待线程完成的最大时间(以秒为单位)。如果在指定时间内线程未完成,主线程将继续执行。例如: ```python thread.join(1.0) # 最多等待1秒 ``` 如果线程在指定时间内完成,`join` 会立即返回;否则,它会在超时后返回。 ### 注意事项 - 如果不调用 `join`,主线程可能在子线程完成之前结束,导致程序提前退出。 - 调用 `join` 时,确保线程已经启动,否则会引发异常。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值