Как передавать сообщения / информацию между процессами, используя concurrent.futures.ProcessPoolExecutor - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь передавать сообщения между моими процессами. У меня есть процесс, который является клиентом для сервера. Я хочу, чтобы другие процессы передавали информацию клиенту, чтобы передать ее на сервер. Думайте о сервере как о регистраторе данных. Я использую concurrent.futures.ProcessPoolExecutor. Процессы работают непрерывно в while True.

Любой намек на то, как подключить процессы, приветствуется,

Спасибо.

Редактировать: Я нашел ответ. Вся заслуга принадлежит тому, кто опубликовал следующий пост здесь .

import multiprocessing
qm = multiprocessing.Manager()
pqueue = qm.Queue()

1 Ответ

0 голосов
/ 03 мая 2020

Процессы вообще не могут общаться друг с другом через стандартную библиотеку python. Пространство памяти для процесса выделяется ОС и в целом не перекрывается. Родительские процессы (например, ваш исходный python процесс) имеют некоторую ограниченную видимость дочерних процессов (например, процессы, созданные с помощью ProcessPoolExecutor), но не могут передавать сообщения между ними.

У вас есть несколько вариантов здесь.

1) Использовать темы. Если вам на самом деле не нужен параллелизм (например, при использовании всех ядер многоядерной системы), эта опция может сработать. Все потоки выполняются в одном процессе и имеют общее пространство памяти. Таким образом, вы можете писать в объект из одного потока и читать из него в другом. concurrent.futures.ThreadPoolExecutor позволит вам сделать это.

2) Используйте базовую ОС. В общем, когда два процесса, работающие в одной системе, должны обмениваться данными, они делают это через порты. Процесс, который получает сообщения, будет привязан к порту. Процесс, который отправляет сообщения, затем устанавливает sh соединение через этот порт и использует это соединение для связи. Подробнее см. https://docs.python.org/3.7/howto/sockets.html.

3) Используйте брокер сообщений, такой как rabbitMQ или reddis. Это внешние процессы, которые облегчают связь между процессами.

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