Helllo, я хотел бы совместно использовать небольшие объемы данных (<1K) между Python и процессами. Данные являются физическим ПК/104 данные IO, которые изменяются быстро и часто (24x7x365). Будет единственный "сервер", пишущий данные и несколько клиентов, читающих части его. Система это будет работать на флэш-памяти использования (карта CF), а не жесткий диск, таким образом, я буду взволнован по поводу стирания флэш-памяти с основанной на файле схемой. Я также хотел бы использовать меньше питания (процессорное время), поскольку мы на 100% на солнечной энергии.
Спасибо
ОБНОВЛЕНИЕ: Мы замедлили максимальную частоту обновления данных приблизительно к 10 Гц, но более обычно 1 Гц. Клиенты будут только уведомлены, когда значение изменится, а не в постоянной частоте обновления. Мы перешли к нескольким клиентской модели серверов/нескольких, где каждый сервер специализируется на определенном типе инструмента или функции. Так как оказалось, что большая часть программирования была сделанной программистами Java, мы закончили тем, что использовали JSON-RPC по TCP. Серверы wil быть записанным в Java, но я все еще надеюсь записать основному клиенту в Python, и реализации JSON-RPC расследования.
Альтернативой записи данных в файл в серверном процессе может быть прямая запись в клиентские процессы:
Используйте UNIX доменные сокеты (или TCP/IP сокеты, если клиенты работают на разных машинах) для соединения каждого клиента с сервером, и пусть сервер записывает в эти сокеты. В зависимости от вашей конкретной модели обработки, выбор клиента/сокета может быть сделан сервером (например, круглосуточным) или клиентами, сигнализирующими, что они готовы к большему.
.Создайте раздел ramfs и запишите на него. (Можно использовать tmpfs, но в отличие от tmpfs, ramfs не меняется на диск). Однако, так как ramfs не имеет ограничения по размеру, вы должны позаботиться о том, чтобы у вас не заканчивалась память; так как вы записываете туда только крошечный кусочек данных, это не должно быть проблемой.
Таким образом, ваши данные никогда не будут записаны на диск (обратите внимание: вы потеряете их, если питание отключится).
.При работе на флеш-системах убедитесь, что ваша файловая система спроектирована правильно, чтобы максимально продлить срок службы флеш-памяти (выравнивание износа). JFFS и, я думаю, другие теперь способны делать это эффективно. Если вы используете такую систему, вы не должны слишком беспокоиться об использовании флэш-памяти, но, конечно, если вы записываете постоянный поток данных, вы бы хотели избежать этого на флэш-памяти.
Использование файловой системы RAM - это хорошая идея. Лучше полностью избегать файловых систем, если дизайн системы позволяет это. В связи с этим вы упоминаете POSH. Я никогда не пробовал, но мы нашли Pyro ("PYthon Remote Objects") элегантным и эффективным решением в некоторых схожих случаях.
И конечно же есть стандартная библиотека multiprocessing
модуль, который имеет некоторое сходство в том, как он взаимодействует между процессами. Я бы начал с этого для любой новой разработки в этой области, и перешел бы в другое место только в том случае, если бы она не получилась.
] Согласно статье Википедии [] о вызове mmap-системы[], содержимое отображенных файлов памяти [] при обновлении записывается обратно на диск[].[
]. [] Смотрели ли Вы на мультипроцессорный модуль (в стандартной библиотеке) - особенно на часть Состояние деления между процессами?[
] []Рамфы, о которых упоминал Писквор, также кажутся хорошим решением - особенно когда не все процессы написаны на Пифоне.[
]