- Python 学习路径:从零到精通
- Python 环境搭建
- Python 基础语法
- Python 数据结构
- Python 字符串操作
- Python 文件读写
- Python 函数进阶
- Python 面向对象编程(OOP)
- Python 异常处理
- Python 模块与包
- Python 迭代器与生成器
- Python 装饰器
- Flask 基础与入门
- Django 框架基础
- Python RESTful API 开发
- Python Web 表单与用户认证
- Python 数据的操作
- SQLAlchemy ORM 的使用
- Pandas 数据分析基础
- Numpy 数值计算
- 数据可视化(Matplotlib, Seaborn)
- 数据导入导出(CSV, Excel, JSON)
- 使用 requests 库进行 HTTP 请求
- 使用 BeautifulSoup 或 Scrapy 进行网页解析
- 线程与进程的概念
- 使用 threading 模块实现多线程
- 使用 multiprocessing 模块实现多进程
- GIL(全局解释器锁)的概念与影响
- Python 自动化脚本
- Python 常用设计模式
- Python 性能分析工具
- Python 内存管理与优化
- 并行与异步编程(asyncio, concurrent.futures)
- 测试驱动开发(TDD)
- WebSocket 实时通信
- Python GraphQL API 开发
- 前后端分离与前端框架(Vue.js, React)的集成
- 使用 Docker 容器化部署 Python 应用
- CI/CD 流程的自动化(GitHub Actions, Jenkins)
- Scikit-learn, TensorFlow 或 PyTorch 的基础知识
- 数据预处理与特征工程
- 构建与训练模型
- 模型评估与调优
- Hadoop 与 Spark 基础
- 使用 PySpark 进行大数据处理
- 分布式计算与数据流处理
- 基本的加密与解密技术
- 简单的网络安全工具(如端口扫描、漏洞检测)
- Web 安全与常见攻击防御(如 SQL 注入、XSS)
- 项目的协作流程
- 撰写高质量的代码与文档
并行与异步编程(asyncio, concurrent.futures)
class 并行,异步编程,asyncio, concurrent.futures并行与异步编程在 Python 中是提高程序性能、减少等待时间的关键技术。它们各自有不同的应用场景,适用于处理 I/O 密集型任务或 CPU 密集型任务。
并行编程
并行编程允许多个任务同时执行,利用多核处理器的能力。Python 提供了 concurrent.futures
模块来方便地管理并行任务。
concurrent.futures
模块
concurrent.futures
模块提供了两个执行器(Executor)类:
ThreadPoolExecutor
: 用于 I/O 密集型任务,通过线程池实现并发。ProcessPoolExecutor
: 用于 CPU 密集型任务,通过进程池实现并行。
示例:使用 ThreadPoolExecutor
适用于 I/O 密集型任务,如网络请求、文件操作等。
import concurrent.futures
import time
def fetch_data(index):
print(f"Fetching data for {index}...")
time.sleep(2) # 模拟I/O操作的延迟
return f"Data {index}"
# 使用 ThreadPoolExecutor 进行并发任务执行
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
results = list(executor.map(fetch_data, range(10)))
for result in results:
print(result)
示例:使用 ProcessPoolExecutor
适用于 CPU 密集型任务,如计算、图像处理等。
import concurrent.futures
import math
def compute_factorial(n):
return math.factorial(n)
numbers = [5, 10, 20, 30, 50]
# 使用 ProcessPoolExecutor 进行并行计算
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
results = list(executor.map(compute_factorial, numbers))
for number, result in zip(numbers, results):
print(f"Factorial of {number} is {result}")
异步编程
异步编程允许程序在等待 I/O 操作时执行其他任务,从而提高程序的响应速度。Python 的 asyncio
模块是异步编程的核心模块。
asyncio
模块
asyncio
模块提供了 async
和 await
关键字,用于定义和执行异步函数。
示例:使用 asyncio
进行异步 I/O 操作
import asyncio
async def fetch_data(index):
print(f"Fetching data for {index}...")
await asyncio.sleep(2) # 模拟I/O操作的延迟
return f"Data {index}"
async def main():
tasks = [fetch_data(i) for i in range(5)]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
# 运行异步主函数
asyncio.run(main())
何时使用并行 vs 异步
- 并行编程:适合 CPU 密集型任务,需要利用多核处理器的能力。
- 异步编程:适合 I/O 密集型任务,如网络请求、文件读取等,不需要大量 CPU 运算,主要是减少等待时间。
组合使用 asyncio
和 concurrent.futures
你可以将 concurrent.futures
与 asyncio
结合使用,在异步函数中使用并行计算:
import asyncio
import concurrent.futures
def compute_factorial(n):
return math.factorial(n)
async def main():
loop = asyncio.get_running_loop()
with concurrent.futures.ProcessPoolExecutor() as executor:
numbers = [5, 10, 20, 30, 50]
tasks = [
loop.run_in_executor(executor, compute_factorial, number)
for number in numbers
]
results = await asyncio.gather(*tasks)
for number, result in zip(numbers, results):
print(f"Factorial of {number} is {result}")
# 运行异步主函数
asyncio.run(main())
在这个示例中,我们结合使用了 asyncio
和 ProcessPoolExecutor
,在异步函数中执行 CPU 密集型任务,充分利用多核 CPU,同时保持异步的优势。
评论区
评论列表
{{ item.user.nickname || item.user.username }}