Почему моя очередь висит с циклом событий asyncio - PullRequest
0 голосов
/ 18 октября 2019

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

Отключение рабочей очереди ничего не меняет, равно как и исполнитель (по умолчанию, поток или процесс).

Идеи?

1 Ответ

0 голосов
/ 18 октября 2019

Я решил дать ответ на основании моего расследования. Вкратце: то, что работает в новом цикле событий в новом процессе, НЕ работает в цикле событий каналов Django по той или иной причине.

Мое текущее решение - вручную создать новый поток для запуска моего синхронного слушателя. in. Я ищу варианты того, почему цикл событий Channels не будет работать в моем случае использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...