Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.Task

задачи

Задача — корутина, запущенная в цикле событий конкурентно с остальными. Создаётся asyncio.create_task() и позволяет ждать результат, отменять и именовать работу.

Синтаксис

task = asyncio.create_task(coro, name=None); result = await task

Цикл держит на задачи только слабые ссылки: задача, которую никто не сохранил в переменную или множество, может быть собрана сборщиком мусора посреди работы. cancel() не останавливает задачу сразу, а бросает CancelledError в точке её текущего await; глотать это исключение в except Exception нельзя — с 3.8 оно наследует BaseException, но голый except его поймает. Напрямую asyncio.Task(...) не создают.

Примеры

import asyncio
async def work():
    await asyncio.sleep(0.01)
    return 'ok'
async def main():
    task = asyncio.create_task(work(), name='worker')
    print(task.get_name(), task.done())  # → worker False
    print(await task, task.done())  # → ok True
asyncio.run(main())
import asyncio
async def forever():
    try:
        await asyncio.sleep(10)
    except asyncio.CancelledError:
        print('отменили во время sleep')  # → отменили во время sleep
        raise
async def main():
    task = asyncio.create_task(forever())
    await asyncio.sleep(0.01)
    task.cancel()
    try:
        await task
    except asyncio.CancelledError:
        print(task.cancelled())  # → True
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности