Простой веб-сокет-сервер в Python для публикации - PullRequest
0 голосов
/ 02 сентября 2018

У меня работает приложение CLI на Python, которое использует потоки для выполнения некоторых рабочих. Сейчас я пишу графический интерфейс, используя электрон для этого приложения. Для простых запросов / ответов я использую gRPC для связи между приложением Python и графическим интерфейсом.

Однако я изо всех сил пытаюсь найти подходящий механизм публикации для передачи данных в графический интерфейс: gRPC встроенная потоковая передача не будет работать, поскольку она использует генераторы; как уже упоминалось выше, задачи блокировки выполняются с использованием потоков (подклассы threading.Thread). Также я хотел бы выдавать определенные события (например, прогресс) из этих потоков.

Затем я обнаружил реализацию Flasks SocketIO, которая, однако, является блокирующим выполнением и, таким образом, не очень подходит для того, что я имею в виду - мне придется снова выполнить два процесса (Flask и мое CLI-приложение). ) ...

Другой пакет, который я нашел, это websockets, но я не могу понять, как я могу реализовать эту producer() функцию, которую они упоминают в шаблонах .

Моя последняя идея состояла бы в том, чтобы развернуть систему сообщений на основе брокера, такую ​​как Redis, или просто переключиться на zmq без посредников, что немного затрудняет настройку приложения GUI.

Итак, простой вопрос:

Существует ли какая-либо простая структура, позволяющая создать серверную «задачу» в Python, на которую я могу передавать сообщения для публикации?

1 Ответ

0 голосов
/ 11 сентября 2018

Для тех, кто борется с параллелизмом в python:

Нет, простой структуры не существует. ИМХО обработка параллелизма у питонов - немного беспорядок (по сравнению с другими языками, такими как golang, где встроен параллелизм). Есть несколько основных пакетов, реализующих это, один из них asyncio, но большинство из них несовместимы. Я закончил тем, что использовал подобное решение, подобное предложенному в этом вопросе .

...