Python Glossary English

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

asyncio.run_coroutine_threadsafe()

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

Отправляет корутину в цикл событий, работающий в другом потоке, и возвращает concurrent.futures.Future для ожидания результата.

Синтаксис

future = asyncio.run_coroutine_threadsafe(coro, loop)

Это мост из обычного потока в цикл: из рабочего потока нельзя звать create_task, а эта функция потокобезопасна. Возвращается Future из concurrent.futures, его ждут через fut.result(timeout) — блокирующе. Вызвать result() в потоке самого цикла значит повесить программу: цикл ждёт сам себя. Цикл передают явно, потому что в чужом потоке текущего цикла нет.

Примеры

import asyncio
async def add(a, b):
    await asyncio.sleep(0.01)
    return a + b
def worker(loop):
    fut = asyncio.run_coroutine_threadsafe(add(2, 3), loop)
    return fut.result(timeout=1)  # блокирует рабочий поток, а не цикл
async def main():
    loop = asyncio.get_running_loop()
    print(await asyncio.to_thread(worker, loop))  # → 5
asyncio.run(main())

См. также

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