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

机械外贸网站站长网站工具

机械外贸网站,站长网站工具,深圳建网站价格,免费网站建设开发快速入门 Python concurrent.futures concurrent.futures 是 Python 中用于实现并发编程的强大工具,它提供了高级接口来异步执行可调用对象。 1. 理解基本概念 Executor:执行器类,包括 ThreadPoolExecutor(线程池)和…

快速入门 Python concurrent.futures

concurrent.futures 是 Python 中用于实现并发编程的强大工具,它提供了高级接口来异步执行可调用对象。

1. 理解基本概念

  • Executor:执行器类,包括 ThreadPoolExecutor(线程池)ProcessPoolExecutor(进程池)是核心类,负责管理线程/进程的生命周期。

  • 提交任务:通过 submit() 提交单个任务,或 map() 批量提交任务。

  • Future:表示异步计算的对象,用于获取结果或状态。可通过 result() 获取(阻塞),或 as_completed() 迭代已完成的任务。

  • 适用场景:理解线程(IO密集型)和进程(CPU密集型)的区别

    • 线程池:I/O 密集型任务(如网络请求、文件读写),利用线程等待 I/O 的时间切换执行其他任务。
    • 进程池:CPU 密集型任务(如数值计算),绕过 Python GIL(全局解释器锁)限制,利用多核 CPU。
  • 安装与导入:concurrent.futures 是标准库,无需额外安装。

    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
    import time  # 用于计时
    

2. 基本使用模式

操作方法/说明
创建线程池/进程池ThreadPoolExecutor(max_workers=N)ProcessPoolExecutor(max_workers=N)
提交单个任务executor.submit(func, *args, **kwargs) → 返回 Future 对象
批量提交任务executor.map(func, iterable) → 返回按输入顺序的迭代器(不支持异常捕获)
异步获取结果future.result(timeout=None) → 阻塞直到完成(超时可选)
迭代已完成的任务as_completed(futures) → 返回按完成顺序的 Future 迭代器
取消未执行的任务future.cancel() → 仅当任务未开始时可能成功(返回布尔值)

3. 举例

I/O 密集型任务

def fetch_url(url):"""模拟网络请求:延迟 1 秒后返回 URL"""time.sleep(1)  # 模拟 I/O 等待return f"Data from {url}"# 主程序
if __name__ == "__main__":urls = ["https://example.com", "https://google.com", "https://github.com"]# 1. 创建线程池(默认线程数为 CPU 核心数 * 5,可通过 max_workers 指定)with ThreadPoolExecutor(max_workers=3) as executor:# 2. 提交任务(方式 1:逐个提交,返回 Future 对象)futures = [executor.submit(fetch_url, url) for url in urls]# 3. 获取结果(方式 1:按完成顺序遍历)for future in as_completed(futures):try:result = future.result()  # 阻塞直到任务完成print(result)except Exception as e:print(f"Task failed: {e}")# (可选)方式 2:批量提交并按输入顺序获取结果(map 方法)results = executor.map(fetch_url, urls)  # 返回迭代器,按 urls 顺序输出print(list(results))  # 输出:["Data from ...", ...]

CPU 密集型任务

def calculate_factorial(n):"""计算阶乘(CPU 密集型)"""result = 1for i in range(1, n+1):result *= ireturn resultif __name__ == "__main__":numbers = [1000, 2000, 3000, 4000]# 使用进程池(绕过 GIL,利用多核)with ProcessPoolExecutor(max_workers=4) as executor:# 提交任务并获取结果futures = [executor.submit(calculate_factorial, num) for num in numbers]for future in as_completed(futures):print(f"Factorial result: {future.result()}")

4. 计时

使用 time.perf_counter()(高精度计时器)测量整个并发任务的执行时间:

import time
from concurrent.futures import ThreadPoolExecutordef process_data(a, b):time.sleep(0.5)return f"Result: {a}-{b}"if __name__ == "__main__":start_time = time.perf_counter()  # 记录开始时间with ThreadPoolExecutor(max_workers=3) as executor:# 提交 5 个任务(多变量)futures = [executor.submit(process_data, i, f"str_{i}") for i in range(5)]# 等待所有任务完成(可选:遍历结果)for future in as_completed(futures):print(future.result())end_time = time.perf_counter()  # 记录结束时间total_time = end_time - start_timeprint(f"Total time: {total_time:.2f} seconds")  # 输出约 0.5~1 秒(并发执行)

学习资源

  1. 官方文档

    • concurrent.futures — 启动并行任务:最权威的参考资料,包含所有类和方法的详细说明
  2. 实用教程

    • Real Python 并发教程:实时 Python 的并发编程指南,涵盖 concurrent.futures 的详细用法和场景对比。
    • 《Python并行编程手册》
    • 《流畅的Python》中 第 19 章
    • 《流畅的Python》中关于并发编程的章节笔记
    • 《Python并发编程实战》
  3. 视频资源

    • Corey Schafer 的并发编程教程(YouTube)
    • Python 多线程与多进程(YouTube)
http://www.dtcms.com/a/512319.html

相关文章:

  • 广州企业建站素材安徽禹尧工程建设有限公司网站
  • MySQL if函数
  • Promise.all怎么用
  • 成都网站建设开发价玉环哪里有做网站
  • 01)mysql数据误删恢复相关-mysql5.7 开启 binlog、设置binlog 保留时间
  • 电力电子技术 第五章——非连续导电模式
  • Django 项目 .gitignore 模板
  • MySQL 中文排序(拼音排序)不生效问题全解析
  • 建站网络公司云南网站备案难吗
  • 深度学习(8)- PyTorch 数据处理与加载
  • JAVA:Spring Boot 集成 Jackson 实现高效 JSON 处理
  • 深度学习之YOLO系列YOLOv4
  • 江西移动网站建站推广外包
  • 张家口网站建设zjktao温州公司网址公司
  • Cef笔记:Cef消息循环的集成
  • 第十六篇:Lambda表达式:匿名函数对象的艺术
  • 织梦cms通用蓝白简介大气企业网站环保科技公司源码汕头网站制作全过程
  • xss-labs pass-06
  • 解决selenium提示chrome版本过低问题
  • 重庆做网站电话深圳做装修网站费用多少
  • 做网站的免费空间商品房交易网
  • 鸡蛋质量识别数据集,可识别染血的鸡蛋,棕色鸡蛋,钙沉积鸡蛋,污垢染色的鸡蛋,白鸡蛋,平均正确识别率可达89%,支持yolo, json, xml格式的标注
  • YOLOv4简单基础学习
  • 网站的域名每年都要续费南通网络科技有限公司
  • LLAMA-Factory Qwen3-1.7b模型微调
  • PageHelper 分页框架查询总数 SQL 错误解决方案:从源码逻辑到版本影响(含实验验证)
  • NExF——建立3D空间上的曝光场辅助重建
  • 网站建设公司 合肥影视后期制作培训机构全国排名
  • 审计 jenkins获取构建历史,生成excel
  • 【能源与流程工业案例】KBC借助TeeChart 打造工业级数据可视化平台