Я запускаю новый процесс (редактировать то же самое применимо к новому потоку) для вычислений из цикла асинхронных событий. У нового процесса есть собственный цикл событий asyncio, который работает нормально, без каких-либо блокировок.
Я создал две очереди (multiprocessing.Queue
или multiprocessing.Manager.Queue
), одну для исходящих сообщений, а другую для входящих сообщений. У меня одинаковое поведение с обеими очередями. Очередь исходящих сообщений работает нормально, так как я помещаю / получаю сообщение в очередь с помощью:
await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.put, msg)
msg = await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.get, True, 1)
Однако, когда я пытаюсь запустить ту же команду get()
в моем исходном приложении asyncio с помощью команды asyncio run_in_executor
, она просто зависает. Сам цикл событий кажется прекрасным и отзывчивым.
Отключение рабочей очереди ничего не меняет, как и исполнитель (по умолчанию, поток или процесс).
Идеи?