async for in python 3.6 同时启动作业
async for in python 3.6 to start jobs simultaneously
我有几个要同时触发的 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
你能告诉我怎么做吗?
问题是 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)
])
如果不能回答您的问题,请评论 follow-up。
我有几个要同时触发的 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
你能告诉我怎么做吗?
问题是 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)
])
如果不能回答您的问题,请评论 follow-up。