Подтвердить что ты не робот

Какая разница между loop.create_task, asyncio.async/secure_future и Task?

Я немного смущен некоторыми asyncio функциями. Я вижу, что есть функция BaseEventLoop.create_task(coro), чтобы запланировать совместную процедуру. Документация для create_task говорит о своей новой функции, и для совместимости мы должны использовать asyncio.async(coro), которая, обращаясь к документам снова, я вижу псевдоним для asyncio.ensure_future(coro), который снова планирует выполнение совместной процедуры.

Между тем, я использовал Task(coro) для планирования выполнения совместной программы, и это тоже кажется, что работает нормально. так, какая разница между всеми этими?

4b9b3361

Ответ 1

Как вы заметили, все они делают то же самое.

asyncio.async пришлось заменить на asyncio.ensure_future, потому что в Python >= 3.5, async было создано ключевое слово [1].

create_task raison d'etre [2]:

Контуры сторонних событий могут использовать свой собственный подкласс Task для взаимодействия. В этом случае тип результата является подклассом Task.

И это также означает, что вы не должны создавать Task напрямую, потому что разные циклы событий могут иметь разные способы создания "задачи".

Edit

Другим важным отличием является то, что в дополнение к принятию сопрограммы ensure_future также принимает любой ожидаемый объект; create_task, с другой стороны, просто принимает сопрограммы.