Общая память между процессами python

Я пытаюсь выяснить способ обмена памятью между процессами python. В основном существуют объекты, которые существуют, что несколько процессов python должны иметь возможность читать (читать только) и использовать (без мутации). Прямо сейчас это реализовано с использованием redis + strings + cPickle, но cPickle занимает драгоценное время процессора, поэтому я не хочу этого использовать. Большинство реализаций разделяемой памяти на python, которые я видел в интернатах, похоже, требуют файлов и рассолов, которые в основном являются тем, что я делаю, и именно того, чего я пытаюсь избежать.

Что мне интересно, если бы был способ написать подобный … в основном базу данных / сервера объектов python в памяти и соответствующий модуль C для взаимодействия с базой данных?

В основном модуль C запрашивал у сервера адрес для записи объекта, сервер отвечал бы адресом, затем модуль записывал бы объект и уведомлял сервер о том, что объект с заданным ключом был записан на диск на указанное местоположение. Затем, когда какой-либо из процессов хотел получить объект с заданным ключом, он просто попросил бы db для ячейки памяти для данного ключа, сервер ответит местоположением, и модуль будет знать, как загрузить это пространство в памяти и передайте объект python обратно в процесс python.

Неужели это абсолютно необоснованно или просто очень сложно реализовать? Я погоню за чем-то невозможным? Любые предложения приветствуются. Спасибо, интернет.

2 Solutions collect form web for “Общая память между процессами python”

Неразумно.

IPC может быть выполнен с помощью файла с отображением памяти. Python имеет встроенные функции:

http://docs.python.org/library/mmap.html

Просто mmap файл в обоих процессах и hey-presto у вас есть общий файл. Конечно, вам нужно будет опросить его в обоих процессах, чтобы узнать, какие изменения. И вам придется взаимодействовать между ними. И решить, в какой формат вы хотите разместить свои данные. Но это общее решение вашей проблемы.

Если вы не хотите травления, может потребоваться multiprocessing.sharedctypes . Тем не менее, это немного низкоуровневый; вы получаете одиночные значения или массивы определенных типов.

Другим способом распространения данных для дочерних процессов (в одном случае) является multiprocessing.Pipe . Это может обрабатывать объекты Python, и оно реализовано на C, поэтому я не могу сказать, что он использует травление или нет.

  • Как легко хранить удобные для чтения на python структуры данных только для чтения в общей памяти
  •  
    Interesting Posts for Van-Lav

    Подключение двух разных виджетов на qt с помощью python с помощью кнопки

    Py2Exe "Отсутствующие модули"

    Найти максимальную площадь многоугольника, вписанного в более крупный многоугольник

    Неоднократно не удалось установить scrapy и lxml

    Утилиты Python продолжаются после отказа

    SWIG-интерфейс библиотеки C на Python (создание «итерабельного» типа данных Python из структуры последовательности C)

    Как я могу форматировать помощь позиционного аргумента с помощью оппонента Python?

    Поддерживает ли python logging.handlers.RotatingFileHandler создание файла записи для записи в группе?

    целевой и Android и iphone с Python

    Построить Python с Mingw и gcc

    Python: сортировать массив словарей с пользовательским компаратором?

    Как я могу подавать стандартный ввод подпроцесса из итератора Python?

    Распаковка более одного списка в качестве аргумента для функции

    Неразрешенные проблемы импорта с PyDev и Eclipse

    Почему Python устанавливает только False и Zero?

    Python - лучший язык программирования в мире.