首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免使用aiohttp的“太多请求”错误

如何避免使用aiohttp的“太多请求”错误
EN

Stack Overflow用户
提问于 2022-09-06 21:27:05
回答 1查看 76关注 0票数 1

下面是我的解析器代码片段。它异步执行120个请求。但是,每个响应都返回429个“太多请求”错误。我如何使它“变慢”,这样api就不会拒绝我了?

代码语言:javascript
复制
def get_tasks(self, session):
    tasks = []
    for url in self.list_of_urls:
        tasks.append(asyncio.create_task(session.get(url, ssl=False)))
    return tasks


async def get_symbols(self):
    print('Parsing started')
    async with aiohttp.ClientSession() as session:
        tasks = self.get_tasks(session)
        responses = await asyncio.gather(*tasks)
        for response in responses:
            response = await response.json()
            print(response)

错误:

代码语言:javascript
复制
{'message': 'Too many requests'}
{'message': 'Too many requests'}
{'message': 'Too many requests'}
{'message': 'Too many requests'}
{'message': 'Too many requests'}
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 21:37:47

尝试使用asyncio.Semaphore

代码语言:javascript
复制
# Initialize a semaphore object with a limit of 3 (max 3 downloads concurrently)
limit = asyncio.Semaphore(3)


async def make_one_request(url):
    async with limit:
        return await session.get(url, ssl=False)


def get_tasks(self, session):
    tasks = []
    for url in self.list_of_urls:
        tasks.append(asyncio.create_task(make_one_request(url)))
    return tasks


async def get_symbols(self):
    print("Parsing started")
    async with aiohttp.ClientSession() as session:
        tasks = self.get_tasks(session)
        responses = await asyncio.gather(*tasks)
        for response in responses:
            response = await response.json()
            print(response)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73627917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档