#python #python-asyncio
#питон #python-asyncio
Вопрос:
Я использую asyncio для нескольких задач. Однако одна из этих задач использует библиотеку, которая не поддерживает asyncio, и ей должна быть предоставлена обычная (не асинхронная) функция обратного вызова. По другим причинам я не могу просто поместить вызов библиотечной функции в исполнителя.
Есть ли в моем обратном вызове какой-либо способ, которым я могу сказать библиотеке asyncio переключиться на другие задачи (необходимо), а затем возобновить обратный вызов? Например, если бы я мог вызвать что-то вроде того, что вы бы вызвали yield()
в многопоточной программе или await asyncio.sleep(0)
в программе asyncio. Что-то, что могло бы подсказать циклическому устройству asyncio просмотреть свой список задач и вернуться, как только он просмотрит текущий список доступных задач? Я думаю о том, как вручную перекачивать некоторые сообщения из цикла событий.
Комментарии:
1. Если библиотека блокируется, она не может работать в потоке asyncio, она должна выполняться в отдельном потоке. Обратный вызов, который вы предоставляете, может затем взаимодействовать с asyncio с помощью
asyncio.run_coroutine_threadsafe()
и аналогично. Из вашего вопроса я понимаю, что вы не можете запустить библиотеку в другом потоке «по другим причинам». Если это так, можете ли вы затронуть эти причины? Возможно, там можно что-то сделать.