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

如何并行运行两个带不同参数的异步函数并收集返回结果?

实现多函数并行运行并收集结果

针对你的需求,这里提供两种常用的实现方式,都能让不同函数带不同参数并行执行,最后统一收集结果:

方法1:使用线程池(ThreadPoolExecutor)

适合IO密集型任务(比如你的代码里有time.sleep),不需要大幅修改原有函数:

import time
from concurrent.futures import ThreadPoolExecutor

def func1(x,y):
    print("run func1")
    if x == 1:
        res1=x+y
    else:
        res1=x-y
    time.sleep(2)
    return res1

def func2(text):
    print("run fun2")
    if text=="hello":
        res2=True
    else:
        res2=False
    time.sleep(1)
    return res2

def parallel():
    with ThreadPoolExecutor() as executor:
        # 提交两个不同任务,每个任务绑定对应函数和参数
        future1 = executor.submit(func1, x=2, y=4)
        future2 = executor.submit(func2, text="hello")
        # 等待任务完成并获取结果
        res1 = future1.result()
        res2 = future2.result()
    return res1, res2

res1,res2=parallel()
print(res1)
print(res2)

关键说明:

  • executor.submit() 用于提交单个任务,第一个参数是目标函数,后面跟位置参数或关键字参数
  • future.result() 会阻塞当前线程,直到对应任务完成并返回结果
  • with 语句会自动管理线程池的创建和销毁,无需手动关闭

方法2:使用异步IO(asyncio)

适合原生异步场景,需要将普通函数改为异步函数:

import asyncio

async def func1(x,y):
    print("run func1")
    if x == 1:
        res1=x+y
    else:
        res1=x-y
    await asyncio.sleep(2)  # 替换time.sleep为异步睡眠
    return res1

async def func2(text):
    print("run fun2")
    if text=="hello":
        res2=True
    else:
        res2=False
    await asyncio.sleep(1)
    return res2

async def parallel():
    # 创建异步任务
    task1 = asyncio.create_task(func1(x=2, y=4))
    task2 = asyncio.create_task(func2(text="hello"))
    # 等待所有任务完成,按顺序返回结果
    res1, res2 = await asyncio.gather(task1, task2)
    return res1, res2

if __name__ == "__main__":
    res1, res2 = asyncio.run(parallel())
    print(res1)
    print(res2)

关键说明:

  • 函数前加async关键字定义异步函数,内部的阻塞操作(比如sleep)要替换为异步版本(await asyncio.sleep())
  • asyncio.create_task() 将异步函数包装为可调度的任务
  • asyncio.gather() 会同时运行所有传入的任务,等待全部完成后返回结果列表,顺序和传入任务的顺序一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:35:25