После некоторого теста я обнаружил, что следующий подход работает для 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
.