【发布时间】:2021-09-30 22:25:08
【问题描述】:
我有一些函数应该并行运行并收集数据一秒钟,然后在时间过去后返回数据。
问题是,一项任务(据我所知)先于另一项完成,导致 results 在该结果上为空。例如下面的代码:
import asyncio
import time
async def task(id, end_time):
print('Started task ', id)
results = []
while time.time() < end_time:
results.append(1)
return results
async def main():
while True:
end_time = time.time() + 1
results = await asyncio.gather(*[task(i,end_time) for i in range(2)])
print(len(results[0]), len(results[1]))
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
except KeyboardInterrupt:
pass
finally:
loop.close()
返回
Started task 0
Started task 1
5580452 0
我哪里错了?我知道我应该以某种方式让它等待所有任务完成,然后再对结果进行操作,但是在摆弄了一段时间之后,我真的不知道如何实现这一点。
【问题讨论】:
标签: python python-asyncio