You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何并行调用多个库/函数,全部完成后再执行后续步骤?

问题解答

可行性说明

该需求完全可以实现,核心是实现多个并行任务的屏障同步,即所有任务执行完成后再触发后续逻辑,完全适配你多数据集并行加载的场景。

技术选型标准

  • 若你的数据加载环节以IO操作为主(如网络下载、磁盘读取,CPU运算占比<10%):优先选择async方案,资源开销更小,并发调度效率更高;也可以直接用多线程方案,改造成本更低。
  • 若你的数据加载环节包含大量CPU密集运算(如大数据集解码、格式转换、实时清洗):优先选择multiprocessing多进程方案,规避Python GIL锁对CPU算力的限制。

实现示例

async方案(IO密集场景首选)

import asyncio
import aiohttp
import aiofiles

# 替换为你自己的数据集加载逻辑,支持完全不同的任务实现
async def load_dataset_1():
    async with aiohttp.ClientSession() as session:
        async with session.get("数据集1下载地址") as resp:
            return await resp.content.read()

async def load_dataset_2():
    async with aiofiles.open("本地数据集2路径", "rb") as f:
        return await f.read()

# 更多数据集加载函数可自行定义...

async def main():
    # 批量启动所有并行任务,等待全部完成后按顺序返回结果
    var1, var2 = await asyncio.gather(
        load_dataset_1(),
        load_dataset_2()
        # 追加更多数据集加载任务即可
    )
    # 所有任务完成后再执行后续逻辑
    var3 = var1 + var2
    # 后续业务逻辑...

if __name__ == "__main__":
    asyncio.run(main())

多进程方案(CPU密集场景首选)

from concurrent.futures import ProcessPoolExecutor, wait
import requests

# 替换为你自己的数据集加载逻辑,支持完全不同的任务实现
def load_dataset_1():
    resp = requests.get("数据集1下载地址")
    # 可添加CPU密集型预处理逻辑
    return resp.content

def load_dataset_2():
    with open("本地数据集2路径", "rb") as f:
        data = f.read()
        # 可添加CPU密集型预处理逻辑
        return data

# 更多数据集加载函数可自行定义...

if __name__ == "__main__":
    with ProcessPoolExecutor() as executor:
        # 提交所有并行任务
        tasks = [
            executor.submit(load_dataset_1),
            executor.submit(load_dataset_2)
            # 追加更多数据集加载任务即可
        ]
        # 等待所有任务执行完成
        wait(tasks)
        # 按顺序获取任务结果
        var1, var2 = [task.result() for task in tasks]
    # 所有任务完成后再执行后续逻辑
    var3 = var1 + var2
    # 后续业务逻辑...

补充说明

如果是纯IO场景不想改造异步代码,只需要把多进程示例中的ProcessPoolExecutor替换为ThreadPoolExecutor,不需要修改其他代码即可获得和async接近的性能,改造成本最低。

内容的提问来源于stack exchange,提问作者Lostsoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:30:02