小编Aar*_*Ahn的帖子

Python Aiohttp Asyncio:如何在每个任务之间创建延迟

我试图解决的问题: 我正在向服务器发出许多 api 请求。我试图在异步 api 调用之间创建延迟,以遵守服务器的速率限制策略。

我想要它做什么 我希望它的行为如下:

  1. 发出 api 请求 #1
  2. 等待0.1秒
  3. 发出 api 请求 #2
  4. 等待0.1秒...等等...
  5. 重复直到所有请求都提出
  6. 收集响应并在一个对象中返回结果(结果)

问题: 当我在代码中引入asyncio.sleep()time.sleep()时,它仍然几乎立即发出 api 请求。它似乎延迟了print()的执行,但没有延迟 api 请求。我怀疑我必须在循环中创建延迟,而不是在 fetch_one() 或 fetch_all() 处,但不知道如何做到这一点。

代码块:

async def fetch_all(loop, urls, delay): 
    results = await asyncio.gather(*[fetch_one(loop, url, delay) for url in urls], return_exceptions=True)
    return results

async def fetch_one(loop, url, delay):

    #time.sleep(delay)
    #asyncio.sleep(delay)

    async with aiohttp.ClientSession(loop=loop) as session:
        async with session.get(url, ssl=SSLContext()) as resp:
            # print("An api call to ", …
Run Code Online (Sandbox Code Playgroud)

python api delayed-execution python-asyncio aiohttp

4
推荐指数
1
解决办法
4597
查看次数

标签 统计

aiohttp ×1

api ×1

delayed-execution ×1

python ×1

python-asyncio ×1