当前位置: 首页 > news >正文

python ThreadPoolExecutor基础

 基础代码

with ThreadPoolExecutor(max_workers=3) as executor:# 进入这个代码块时,线程池立即创建并准备好# 这里不会阻塞,可以立即提交任务# 提交任务(非阻塞)future1 = executor.submit(task1)future2 = executor.submit(task2)# 其他代码会立即执行print("这行代码会立即执行,不会等待任务完成")# 当退出 with 代码块时,会调用 executor.shutdown(wait=True)
# 这里才会阻塞,等待所有线程执行完成
print("所有线程执行完成后才会执行这行")

with结束的时候会被阻塞

这就要说with的基本语法

with 上下文管理器 as 变量:# 使用资源的代码块
# 自动清理资源

上面代码等驾于

管理器 = 上下文管理器()
变量 = 管理器.__enter__()
try:# 使用资源的代码块
finally:管理器.__exit__()

ThreadPoolExecutor的做法是

class ThreadPoolExecutor:def __enter__(self):return self  # 返回 executor 对象本身def __exit__(self, exc_type, exc_val, exc_tb):self.shutdown(wait=True)  # 这就是隐式调用的地方

self.shutdown(wait=True)会造成阻塞,等待所有任务执行完成

如果在with块内就需要阻塞

# 方法1:手动控制关闭
executor = ThreadPoolExecutor(max_workers=3)
futures = [executor.submit(task, i) for i in range(5)]
# 手动等待特定任务
result = futures[0].result()
executor.shutdown(wait=False)  # 不等待立即关闭# 方法2:使用 as_completed 按完成顺序处理
with ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, i) for i in range(5)]# 不等待所有任务,按完成顺序处理for future in as_completed(futures):result = future.result()print(f"完成: {result}")

future.result()会造成阻塞

这里注意一下as_completed并不会使任务按照顺序返回,哪个任务先执行完,上面代码先输出哪个任务的结果

http://www.dtcms.com/a/537347.html

相关文章:

  • 昆山网站建设方案优化公司线下推广的方式有哪些
  • 基于微信公众号开发网站开发上海网络推广培训学校
  • 我的全栈学习之旅:Celery(持续更新!!!)
  • 【Linux】xargs命令
  • CCUT应用OJ题解——贪吃的松鼠
  • [已解决]Python将COCO格式实例分割数据集转换为YOLO格式
  • CSS Backgrounds (背景)
  • Blender入门学习08 - 骨骼绑定
  • 家装设计网站开发企业做网站大概多少钱
  • TCP/UDP端口、IP协议号与路由协议 强行记忆点总结
  • (一)React面试()
  • 配置文件加载顺序与优先级规则
  • 数字化转型迫在眉睫,企业应该如何面对?
  • 做网站百度云网站登录不了
  • HF4054H-B 50V耐压 集成6.1V过压保护和1.3A过流保护 42V热拔插性能的500mA锂电池线性充电芯片
  • 网站可以做音频线吗网站如何安装源码
  • 小学校园文化建设网站网站打不开显示asp
  • 142.DDR报错bank32,33,34
  • Android性能优化深度解析与实际案例
  • 网站素材网站建设的目标和需求
  • 与您探讨电子元器件结构陶瓷(陶瓷基板)的分类及结构陶瓷的应用
  • 模板建站自适应互联网网站分了
  • 苹果ios安卓apk应用APP文件怎么修改手机APP显示的名称
  • 网站界面用什么做的网站创建方法
  • 《自动控制原理》第 3 章 线性控制系统的运动分析:3.6、3.7
  • 特征选择中的统计思维:哪些变量真的重要?
  • 项目七 使用ODL Yang UI操作流表
  • 电子商务网站怎么建料远若近网站建设
  • [CSP-S 2024] 超速检测
  • 基于MT5的K线处理逻辑