我正在使用Anki Cozmo SDK,该SDK需要使用异步函数来实际进行API调用。试图协调其中的两个,有时需要在另一个异步任务之前进行可选的“移动”调用。
简而言之,我需要两个异步任务才能在同一循环上运行,但是直到第一个完成后才启动第二个异步任务。
loop = asyncio.get_event_loop()
async_tasks = []
async_tasks.append(asyncio.ensure_future(bot1.draw_line(), loop=loop))
async_tasks.append(asyncio.ensure_future(bot2.draw_line(), loop=loop))
if draw_util.point_conflicts(selected_plans, bot.position, CDIST):
safe_position = draw_util.find_safe_point_2_robots(selected_plans, bot.position, CDIST + 1)
task = asyncio.ensure_future(bot.move_to(safe_position), loop=loop)
await task
await asyncio.gather(*async_tasks)
我需要某种方法来等待move_to任务完成,然后再继续运行async_tasks
。如何做到这一点?
我尝试使用loop.run_until_complete()
达到相同的效果。
整整一年我都注意到了这个问题,但这是:
asyncio.wait_for
函数可以完全满足您(或实际上)正在寻找的内容。它会阻塞直到任务完成。
请注意,该函数也是一个例程,因此您必须在异步函数中调用它。