Многоядерный Python: многопроцессорная Vs. ZeroMQ? - PullRequest
4 голосов
/ 04 июля 2011

Я хотел бы написать python код, который загружает набор данных в качестве входных данных и анализирует их.

Будет 5 параллельных процессов, которые будут анализировать данные - каждый процесс будет обрабатывать данные по-своему - уникальным способом.

Перед началом какой-либо обработки сценарий master (тот, который «запустит» все различные подпроцессы) определит пустой список.

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

То есть, если process1 изменило первое значение этого списка, все остальные процессы (во время работы) увидят, что первое значение этого списка изменилось.


Мне кажется, что для решения этой проблемы можно использовать 2 разных модуля python: multiprocessing и zeroMQ.

Есть ли в этом случае причины предпочитать одно другому? изменится ли ваш ответ, если вместо выполнения сценария master на одном сервере я буду разделять процессы между различными (несколькими) серверами?

(если это вообще имеет значение, я использую Linux)

Ответы [ 2 ]

5 голосов
/ 05 июля 2011

Нельзя сравнивать яблоки и апельсины.

мультипроцессинг - это библиотека для разветвления многих процессов.

zmq - это библиотека, которая позволяет процессам использовать сообщения для связи.

Они делают разные работы.

1 голос
/ 05 июля 2011

Если , это только два варианта, и вы точно знаете, что будете распределять нагрузку на несколько компьютеров, ZeroMQ - единственный из двух вариантов, который соответствует законопроект.

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

ZeroMQ может использоваться для аналогичных межпроцессных сообщений на одной машине с протоколом IPC, но также имеет сетевые протоколы, которые позволяют отправлять сообщения между процессами, работающими на разных машинах.

Тем не менее, этот вопрос имеет небольшой оттенок проблемы XY , поскольку вы, кажется, произвольно сузили свой выбор только до двух из множества возможностей реализации распределенной программы с использованием Python.

Редактировать Мой ответ здесь был неправильным, и я не могу удалить принятый ответ, поэтому преобразуйте его в вики, если кто-то захочет его исправить. Короче говоря, я неправильно прочитал документацию. Многопроцессорная обработка Python поддерживает межпроцессное взаимодействие через границу сети. Одно из основных отличий ZeroMQ заключается в том, что ZeroMQ не зависит от платформы, поэтому вы можете смешивать агенты клиент / сервер на разных платформах, в то время как многопроцессорная обработка Python является опцией включения батарей, если клиент-серверные процессы связаны с Python.

...