首页 > 解决方案 > 如何使用aoihttp为Python3中的每个异步方法调用传递不同的参数?

问题描述

我必须向 API 发出大量具有不同参数的发布请求。我目前使用循环为参数字典然后运行每个单独的请求,这非常耗时。

我偶然发现了 aiohttp 异步请求库,但我不清楚如何将变量作为参数传递,因为每个请求都会改变。我发现的示例都为不同的 url 传递了一组恒定的标头或参数。

例子:

ohsome_url = 'https://api.ohsome.org/v0.9-ignite/elements/geometry/'
data = {'bpolys': ctybnds,
        'keys': key,
        'values': val}

ohsomeResponse = requests.post(ohsome_url, data=data).json()

变量 ctybnds、key、val 当前都在循环中提取。

提前感谢您的任何见解!

标签: python-3.xpython-requestsaiohttp

解决方案


你需要实现这样的东西:

import aiohttp
import asyncio


async def request(url, data):
    async with cs.get(url, json=data) as resp:
        return resp.json()


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    cs = aiohttp.client.ClientSession()

    requests = [
        request(url, data)
        for url, data in []  # your varying data here
    ]

    result = loop.run_until_complete(
        asyncio.gather(*requests)
    )

    print(result)

推荐阅读