python 中 for 循环内的异步请求

Asynchronous requests inside the for loop in python

我有这个片段

config = {10: 'https://www.youtube.com/', 5: 'https://www.youtube.com/', 7: 'https://www.youtube.com/',
      3: 'https://sportal.com/', 11: 'https://sportal.com/'}

def test(arg):

    for key in arg.keys():
        requests.get(arg[key], timeout=key)


test(config)

这样一来,事情就同步发生了。我想异步进行。我想遍历循环而不等待每个地址的响应并继续下一个。所以直到我遍历字典中的所有地址。比我想等到我得到所有地址的所有响应,然后再退出测试功能。我知道我可以用线程来做,但我读到 asyncio lyb 可以做得更好,但我无法实现它。如果有人有更好的建议,我愿意接受。这是我的尝试:

async def test(arg):

loop = asyncio.get_event_loop()
tasks = [loop.run_in_executor(requests.get(arg[key], timeout=key) for key in arg.keys())]
await asyncio.gather(*tasks)

asyncio.run(test(config))

解决方法如下:

def addresses(adr, to):
    requests.get(adr, timeout=to)

async def test(arg):

    loop = asyncio.get_event_loop()
    tasks = [loop.run_in_executor(None, addresses, arg[key], key) for key    in arg.keys()]
    await asyncio.gather(*tasks)



asyncio.run(test(config))

现在它与 lyb asyncio 同步工作,而不是与线程一起工作。