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

如何修复Python asyncio链式协程执行报错问题?

问题修复方案

错误原因

你直接将download_dummy(task)的返回值(一个协程对象)传给了process_data,而非等待download_dummy执行完成后拿到的实际数据。process_data试图对协程对象执行乘法操作,因此抛出TypeError。

修复代码

把“下载→处理”的链式逻辑封装成独立协程,让每个任务内部先完成下载,再处理数据,同时通过TaskGroup并行执行所有链式任务:

import asyncio
import time

task_inputs = [0,1,2,3,4,5,4,3,4]

async def download_dummy(url):
    await asyncio.sleep(url)
    data = url
    print(f'downloaded {url}')
    return data

async def process_data(data):
    await asyncio.sleep(1)
    processed_data = data*2
    print(f"processed {data}")
    return processed_data

# 封装下载+处理的链式逻辑
async def download_and_process(task):
    data = await download_dummy(task)
    return await process_data(data)

async def main(task_inputs):
    task_handlers  = []
    print(f"started at {time.strftime('%X')}")
    async with asyncio.TaskGroup() as tg:
        for task in task_inputs:
            # 创建链式任务
            res = tg.create_task(download_and_process(task))
            task_handlers.append(res)

    print(f"finished at {time.strftime('%X')}")
    results = [task_handler.result() for task_handler in task_handlers]
    print(results)

asyncio.run(main(task_inputs))

执行逻辑说明

  • 每个download_and_process协程内部会先等待download_dummy完成,拿到返回的data后,再传入process_data执行处理。
  • TaskGroup会同时启动所有download_and_process任务,保证整体并发执行效率,同时每个任务内部按顺序完成下载和处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:49:57