将顺序 Python 代码转换为并行/并发实现,用于在需要并行化 Python 代码、提升性能时使用。
Python 并行化 Skill. 变形顺序 Python 代码以杠杆作用并行执行模式.是一项面向实际任务的技能,主要用于Workflow. 分析代码以识别并行对象.;Classy th。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
将顺序执行的 Python 代码改造为利用并行与并发执行模式。
瓶颈是 CPU 密集型还是 I/O 密集型? CPU 密集型(计算密集): ├── 迭代之间相互独立? → multiprocessing.Pool / ProcessPoolExecutor ├── 需要共享状态? → 使用 multiprocessing.Manager 或共享内存 ├── 涉及 NumPy/Pandas 操作? → 优先向量化,再考虑 numba/dask └── 数据块较大? → 使用 Pool.map 进行分块处理 I/O 密集型(网络、磁盘、数据库): ├── 存在大量独立请求? → 使用 asyncio 配合 aiohttp/aiofiles ├── 基于传统同步代码? → ThreadPoolExecutor ├── 同步与异步混合? → asyncio.to_thread() └── 数据库查询? → 连接池 + 异步驱动 数据并行型(数组/矩阵运算): ├── 使用 NumPy 数组? → 向量化处理,避免 Python 循环 ├── 使用 Pandas DataFrame? → 使用内置向量化方法 ├── 处理超大数据集? → 使用 Dask 实现内存外并行 └── 可用 GPU? → 考虑 CuPy 或 JAX
改造前:
results = []
for item in items:
results.append(expensive_computation(item))
改造后:
from concurrent.futures import ProcessPoolExecutor
with ProcessPoolExecutor() as executor:
results = list(executor.map(expensive_computation, items))
改造前:
import requests
def fetch_all(urls):
return [requests.get(url).json() for url in urls]
改造后:
import asyncio
import aiohttp
async def fetch_all(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch_one(session, url) for url in urls]
return await asyncio.gather(*tasks)
async def fetch_one(session, url):
async with session.get(url) as response:
return await response.json()
改造前:
result = []
for i in range(len(a)):
row = []
for j in range(len(b)):
row.append(a[i] * b[j])
result.append(row)
改造后:
import numpy as np result = np.outer(a, b)
import asyncio
from concurrent.futures import ProcessPoolExecutor
async def hybrid_pipeline(data, urls):
loop = asyncio.get_event_loop()
# 在进程池中执行 CPU 密集型任务
with ProcessPoolExecutor() as pool:
processed = await loop.run_in_executor(pool, cpu_heavy_fn, data)
# 异步执行 I/O 密集型任务
results = await asyncio.gather(*[fetch(url) for url in urls])
return processed, results
在代码中查找以下模式:
| 模式 | 识别特征 | 对应策略 |
|---|---|---|
for item in collection,且各次迭代相互独立 |
无共享变量修改 | Pool.map / executor.map |
多次调用 requests.get() 或文件读取 |
顺序 I/O 操作 | asyncio.gather() |
| 对数组的嵌套循环 | 数值计算场景 | NumPy 向量化 |
time.sleep() 或其他阻塞等待 |
等待外部资源响应 | 线程或异步 |
| 大型列表推导式 | 各元素变换相互独立 | Pool.map 配合分块处理 |
并行化时必须始终保障程序正确性:
executor.submit()map() 而非 submit()async 关键字——需重构整个调用链在最终确认改造后的代码前,请完成以下检查: