Python Glossary English

Python 3.9+Асинхронное программированиефункция

asyncio.to_thread()

связь с потоками

Выполняет обычную блокирующую функцию в отдельном потоке и даёт дождаться её через await, не останавливая цикл событий.

Синтаксис

result = await asyncio.to_thread(func, /, *args, **kwargs)

Подходит для блокирующего ввода-вывода: requests, чтение файла, time.sleep. Для вычислений ускорения нет — из-за GIL поток считает по очереди с циклом; тут нужен ProcessPoolExecutor через run_in_executor. Отмена await не останавливает поток: функция доработает до конца. В отличие от run_in_executor, to_thread переносит contextvars и принимает именованные аргументы. Появилась в 3.9.

Примеры

import asyncio
import time
def blocking(name):
    time.sleep(0.02)  # блокирующий вызов
    return name
async def main():
    results = await asyncio.gather(
        asyncio.to_thread(blocking, 'a'),
        asyncio.to_thread(blocking, name='b'),
    )
    print(results)  # → ['a', 'b']
asyncio.run(main())

См. также

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