我有几个http请求同时触发。我正在尝试使用async for
来执行此操作。
import asyncio
async def ticker(delay, to):
for i in range(to):
yield i
print(i)
await asyncio.sleep(delay) # instead of aiohttp request
print(i, ' fin')
async def main():
async for x in ticker(1,2):
pass
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我继续使用以下内容进行后续调用:
0
0 fin
1
1 fin
相反,我需要输出如下所示:
0
1
0 fin
1 fin
你能告诉我如何做到这一点吗?
答案 0 :(得分:3)
问题在于async for
正是您不需要的。
async for
旨在在每次迭代之间等待任务完成时进行迭代;你想迭代(开始请求)没有等待前面的任务完成。
你想要像
这样的东西async def do_request():
await asyncio.sleep(1)
async def main():
await asyncio.gather(*[
do_request() for i in range(10)
])
如果没有回答你的问题,请跟进后续评论。