Процесс коммуникации Python Multiprocessing - PullRequest
0 голосов
/ 29 апреля 2018

Я узнал о многопроцессных объектах / менеджерах Python multi -process / Shared ctypes и хочу сравнить их с анонимными каналами Linux, именованными каналами, разделяемой памятью, сокетом и так далее. Теперь у меня есть следующие вопросы

  • Каналы и модули очереди многопроцессорной обработки Python основаны на анонимных каналах. Предоставляет ли он именованные каналы?

  • Поддерживает ли Python multiprocessing.sharedctypes независимый процесс связь? Я думаю, что это только поддерживает процесс отца и ребенка или братский процесс общения.

  • Какие из них используются только в процессе отцовства или братство, которое может быть передано между независимыми процессами или разные хосты?

  • Каковы их соответствующие характеристики, как мне их выбрать?

Спасибо заранее.

1 Ответ

0 голосов
/ 04 мая 2018

Ваш вопрос довольно широкий, и большинство ответов можно найти в документации по модулю multiprocessing.

Здесь следует несколько краткий ответ.

  1. Многопроцессорные прослушиватели и клиенты позволяют выбирать именованные каналы в качестве среды передачи.
  2. Из документации :

    Модуль multiprocessing.sharedctypes предоставляет функции для выделения объектов ctypes из общей памяти, которые могут наследоваться дочерними процессами.

    Вы не можете использовать функции multiprocessing.sharedctypes в процессах, которые не имеют отношения родитель / потомок.

  3. Менеджеры и Слушатели и клиенты работают через процессы на разных хостах или у которых нет родительских / дочерних отношений. Семейство сокетов AF_INET может использоваться на разных хостах. Тем не менее, я бы рекомендовал против этого. Скорее используйте сетевые сокеты или какой-то другой механизм абстракции.
  4. Отличия и характеристики хорошо иллюстрируются в документации .

Python multiprocessing модуль изначально был реализован через threading API. К тому времени его возможности выросли, но основная идея осталась прежней. Модуль multiprocessing предназначен для работы с семействами процессов Python. Для любого другого использования лучше использовать модуль subprocess.

Для распределения задач и заданий по нескольким хостам существуют гораздо лучшие решения, абстрагирующие инфраструктуру низкого уровня. Вы можете взглянуть на проекты Python, такие как Celery или Luigi или более сложные инфраструктуры, такие как Apache Mesos .

...