Эффективный Python для Python IPC - PullRequest
25 голосов
/ 20 октября 2011

Что такое межпроцессное взаимодействие (IPC) framework \ техника со следующими требованиями:

  • Перенос собственных объектов Python между двумя процессами Python
  • Эффективен во времени и процессоре (эффективность оперативной памяти не имеет значения)
  • Кроссплатформенный Win \ Linux
  • Приятно иметь: работает с PyPy

ОБНОВЛЕНИЕ 1: процессы находятся на одном хосте и используют одинаковые версии Python и других модулей

ОБНОВЛЕНИЕ 2: процессы запускаются пользователем независимоникто из них не порождает других

Ответы [ 5 ]

18 голосов
/ 20 октября 2011

Нативные объекты не распределяются между процессами (из-за подсчета ссылок).

Вместо этого вы можете выбрать их и поделиться ими, используя доменные сокеты unix, mmap, zeromq или посредника, такого как sqlite3, который предназначен для одновременного доступа.

8 голосов
/ 20 октября 2011

Используйте multiprocessing для запуска.

Если вам нужно несколько процессоров, посмотрите на celery .

6 голосов
/ 21 октября 2011

Оба execnet и Pyro упоминают PyPy <-> CPython связь.Возможно, подойдут и другие пакеты со страницы Параллельная обработка в Python Wiki.

5 голосов
/ 17 ноября 2017

После некоторого теста я обнаружил, что следующий подход работает для Linux с использованием mmap.

В Linux /dev/shm.Если вы создаете общую память с помощью POSIX shm_open, в этой папке создается новый файл.

Хотя модуль Python mmap не обеспечивает функцию shm_open.мы можем использовать обычный open для создания файла в /dev/shm, и он на самом деле похож и находится в памяти.(Используйте os.unlink, чтобы удалить его)

Затем для IPC мы можем использовать mmap для сопоставления этого файла с пространством виртуальной памяти различных процессов.Все процессы разделяют эту память.Python может использовать память в качестве буфера и создавать поверх нее такие объекты, как байты и пустые массивы.Или мы можем использовать его через интерфейс ctypes.

Конечно, примитивы синхронизации процесса все еще необходимы для того, чтобы избежать условий гонки.* ctypes doc и numpy.load с опцией mmap_mode.

5 голосов
/ 20 октября 2011

Параллельный Python , возможно, стоит посмотреть, он работает в Windows, OS X и Linux (и я помню, что некоторое время назад я использовал его на машине UltraSPARC Solaris 10). Я не знаю, работает ли он с PyPy, но действительно работает с Psyco .

...