Я запускаю новый процесс ( редактировать то же самое относится и к новому потоку ) для вычислений из цикла асинхронных событий. Новый процесс имеет свой собственный цикл обработки событий 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
, просто зависает. Сам цикл обработки событий выглядит нормально и отзывчиво.
Отключение рабочей очереди ничего не меняет, равно как и исполнитель (по умолчанию, поток или процесс).
Идеи?