Можно ли использовать multiprocessing.Queue для связи между двумя сценариями Python? - PullRequest
0 голосов
/ 05 декабря 2018

Я только что узнал о параллелизме Python и его многопроцессорности библиотечного модуля.Большинство примеров, с которыми я сталкивался, находятся в ОДНОМ скрипте Python, он порождает несколько процессов и взаимодействует между ними с помощью многопроцессорной обработки.друг с другом с помощью мультипроцессинга. Вопрос?

1 Ответ

0 голосов
/ 05 декабря 2018

Модуль multiprocessing - это пакет, который поддерживает процессы , порождающие , так что вы можете писать код, который выполняется параллельно.Это означает, что вы можете написать один скрипт Python, который прозрачно порождает несколько процессов, не беспокоясь о том, как эти процессы сериализуют данные и передают их друг другу.

Что касается вашего вопроса, то это зависит ... Почемуони должны быть отдельными?

  • Если вас беспокоит только то, что ваши функции определены в разных модулях / сценариях, вы можете просто импортировать все, что вам нужно, в сценарий, который использует Queue, и сделать все ваши функции доступнымив одном сценарии.

  • Если ваш сценарий использования заключается в том, что вы хотите, чтобы один скрипт ожидал запросов (сервер), а другой - клиентом (он отправляет запросы на сервер при необходимости и ожидаетответ), то вам нужно реализовать какой-то протокол RPC.

Вы можете создать http-сервер с помощью веб-фреймворков, таких как Flask, и отправлять на него http-запросы от клиента, или, если вам нужно только поделиться короткими простыми сообщениями, вы можете реализовать собственное сообщение.протокол обмена с использованием сокетов .

Итак, подведем итог: 2 процесса python могут общаться без посредника сообщений (например, через сокеты).Но вы хотите использовать multiprocessing, если хотите запустить 1 скрипт Python, который порождает несколько процессов, которые могут взаимодействовать друг с другом.Если вместо этого вам нужно запустить 2 независимых скрипта, и один из них попросит другой выполнить некоторую работу и вернуть результат, вам нужно реализовать протокол RPC между ними.Сам объект multiprocessing.Queue не является заменой для брокеров сообщений.Если вы хотите, чтобы независимые сценарии, запускаемые независимо, взаимодействовали через очередь сообщений, эта очередь должна находиться либо в одном из взаимодействующих процессов (например, на сервере), либо в третьем процессе.

...