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,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 "," is made at ",time.time())
            # print(resp)
            return await resp

delay = 0.1
urls = ['some string list of urls']
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch_all(loop,delay))

Versions I'm using: 
python                    3.8.5
aiohttp                   3.7.4
asyncio                   3.4.3

如果有任何指导我走向正确方向的提示,我将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)