Эффективный Python для Python IPC

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

См. mmap doc, ctypes doc и numpy.load, который имеет параметр mmap_mode.