В конце я узнал о модуле Python multiprocessing
, который обеспечивает, среди прочего, довольно простой способ распределения памяти между процессами.
В моем случае мне нужно было поделиться строкой, поэтому яинициализирует общую строку с
import multiprocessing as mp
...
shared_str = mp.Array('c', 100)
. Это создает оболочку для общей c-строки длиной 100. Конструктор multiprocessing.Array
принимает аргумент типа (либо класс ctypes
, либо тип ).-кода и длина. Затем я могу получить доступ к общей строке с помощью shared_str.value
.
Я запускаю gunicorn
с параметром --preload
, поэтому разделяемая память выделяется, когда мое приложениесоздан, и тогда каждый процесс может получить к нему доступ со своей собственной копией shared_str
.
. Этот метод будет работать и для других ctypes
объектов (и даже не ctypes
объектов, используя pickle
См. Документацию для multiprocessing
здесь и, в частности, подмодуль sharedctypes
.