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

如何在Python3中实现多REST请求的异步调用

如何将同步REST请求改为asyncio异步调用?

原代码通过requests库同步发起10个POST请求创建分类,每次请求必须等待上一个响应返回后才会执行下一个。现在需要改用asyncio实现异步调用,需做以下核心修改:

关键修改点

  • 替换HTTP库:requests是同步库,无法适配asyncio异步模型,需改用aiohttp异步HTTP客户端库。
  • 改造为异步函数:将原函数定义改为async def,所有异步操作前添加await关键字。
  • 批量并发任务:放弃逐个执行的for循环,将每个请求封装为异步任务,用asyncio.gather()批量并发执行。
  • 适配异步响应处理:使用aiohttp.ClientSession管理异步会话,异步读取并解析响应内容。
  • 调整调用逻辑:异步函数必须在asyncio事件循环中运行,通过asyncio.run()(Python3.7+)启动。

修改后的完整代码

import asyncio
import aiohttp
import json
import os
import logging

async def create_single_category(session, url, headers, category_payload):
    # 单个分类创建的异步任务
    async with session.post(url, headers=headers, json=category_payload) as response:
        response_data = await response.json()
        print(response_data)
        category_id = response_data['id']
        message = f'The entity with id: {category_id} is created successfully.'
        logging.info(message)
        return category_id

async def createCategories(BACKEND_URL, token, category):
    url = os.path.join(BACKEND_URL, 'api/v1/category-creation')
    category_dict = read_payloads(category)

    headers = {
        "token": token,
        "Content-Type": "application/json",
        "accept": "application/json"
    }

    # 创建异步会话,统一管理连接
    async with aiohttp.ClientSession() as session:
        # 生成所有异步任务
        tasks = [
            create_single_category(session, url, headers, payload)
            for name, payload in category_dict.items()
        ]
        # 并发执行所有任务,等待全部完成
        await asyncio.gather(*tasks)
    
    return "categories created successfully."

# 调用示例(需在事件循环中执行)
if __name__ == "__main__":
    # 替换为实际参数
    asyncio.run(createCategories("http://your-backend-url", "your-token", "your-category"))

额外注意事项

  • 先安装依赖:pip install aiohttp
  • 如果read_payloads涉及文件读取等IO操作,建议改用aiofiles改成异步函数,避免阻塞事件循环。
  • logging模块在异步环境中可正常使用,本身具备线程/协程安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:30:33