如何阻止asyncio.Task调用

问题描述 投票:0回答:1

我正在使用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()达到相同的效果。

python asynchronous blocking
1个回答
0
投票

整整一年我都注意到了这个问题,但这是:

asyncio.wait_for函数可以完全满足您(或实际上)正在寻找的内容。它会阻塞直到任务完成。

请注意,该函数也是一个例程,因此您必须在异步函数中调用它。

© www.soinside.com 2019 - 2024. All rights reserved.