异步获取请求

问题描述 投票:0回答:1

我想使用 asyncio 和 aiohttp 进行异步请求。我需要在标头中添加 x api 密钥(但它显示错误)

  File "C:\Users\**********\main.py", line 22, in main
    tasks.append(asyncio.ensure_future(get_ids(session, url, headers)))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: get_ids() takes 2 positional arguments but 3 were given

而且我也不知道我的代码是否正确。您能检查一下并帮助我吗?我是异步新手。

import aiohttp
import asyncio
import time

start_time = time.time()


async def get_ids(session, url):
    async with session.get(url) as resp:
        id_list = await resp.json()
        return id_list['results']


async def main():

    async with aiohttp.ClientSession() as session:

        tasks = []
        for number in range(1, 2000):
            headers = {"x-api-key": '**********************'}
            url = f'https://******************/rest/api/v1/Candidates?start={number}&limit=1'
            tasks.append(asyncio.ensure_future(get_ids(session, url, headers)))

        original_id_list = await asyncio.gather(*tasks)
        for id_list in original_id_list:
            print(id_list)

asyncio.run(main())
print("--- %s seconds ---" % (time.time() - start_time))
python python-asyncio aiohttp
1个回答
0
投票

函数 get_ids 将 session 和 url 作为位置参数,但不接受 headers。 在 get_ids 函数中尝试这样的事情:

async def get_ids(session, url, headers):

之后,在函数内使用标头。

© www.soinside.com 2019 - 2024. All rights reserved.