То, как обменяться данными между Python, обрабатывает, не пишущий в диск

Helllo, я хотел бы совместно использовать небольшие объемы данных (<1K) между Python и процессами. Данные являются физическим ПК/104 данные IO, которые изменяются быстро и часто (24x7x365). Будет единственный "сервер", пишущий данные и несколько клиентов, читающих части его. Система это будет работать на флэш-памяти использования (карта CF), а не жесткий диск, таким образом, я буду взволнован по поводу стирания флэш-памяти с основанной на файле схемой. Я также хотел бы использовать меньше питания (процессорное время), поскольку мы на 100% на солнечной энергии.

  • Действительно ли это - допустимое беспокойство? Мы могли возможно изменить карту CF на SSD.
  • Изменение значения с помощью mmap физически пишут данные в диск, или действительно ли это - виртуальный файл?
  • Мы будем работать на Debian поэтому, возможно, IPC POSIX для модуля Python является лучшим решением. Кто-либо использовал его?
  • Кто-либо попробовал Объект Python Совместное использование (ШИКАРНОГО) модуля? Это выглядит многообещающим на первый взгляд, но это находится в "Альфе" и, кажется, активно не разрабатывается.

Спасибо

ОБНОВЛЕНИЕ: Мы замедлили максимальную частоту обновления данных приблизительно к 10 Гц, но более обычно 1 Гц. Клиенты будут только уведомлены, когда значение изменится, а не в постоянной частоте обновления. Мы перешли к нескольким клиентской модели серверов/нескольких, где каждый сервер специализируется на определенном типе инструмента или функции. Так как оказалось, что большая часть программирования была сделанной программистами Java, мы закончили тем, что использовали JSON-RPC по TCP. Серверы wil быть записанным в Java, но я все еще надеюсь записать основному клиенту в Python, и реализации JSON-RPC расследования.

14
задан RyanN 8 October 2010 в 18:56
поделиться

4 ответа

Альтернативой записи данных в файл в серверном процессе может быть прямая запись в клиентские процессы:

Используйте UNIX доменные сокеты (или TCP/IP сокеты, если клиенты работают на разных машинах) для соединения каждого клиента с сервером, и пусть сервер записывает в эти сокеты. В зависимости от вашей конкретной модели обработки, выбор клиента/сокета может быть сделан сервером (например, круглосуточным) или клиентами, сигнализирующими, что они готовы к большему.

.
8
ответ дан 1 December 2019 в 14:21
поделиться

Создайте раздел ramfs и запишите на него. (Можно использовать tmpfs, но в отличие от tmpfs, ramfs не меняется на диск). Однако, так как ramfs не имеет ограничения по размеру, вы должны позаботиться о том, чтобы у вас не заканчивалась память; так как вы записываете туда только крошечный кусочек данных, это не должно быть проблемой.

Таким образом, ваши данные никогда не будут записаны на диск (обратите внимание: вы потеряете их, если питание отключится).

Смотрите также ramfs docs.

.
4
ответ дан 1 December 2019 в 14:21
поделиться

При работе на флеш-системах убедитесь, что ваша файловая система спроектирована правильно, чтобы максимально продлить срок службы флеш-памяти (выравнивание износа). JFFS и, я думаю, другие теперь способны делать это эффективно. Если вы используете такую систему, вы не должны слишком беспокоиться об использовании флэш-памяти, но, конечно, если вы записываете постоянный поток данных, вы бы хотели избежать этого на флэш-памяти.

Использование файловой системы RAM - это хорошая идея. Лучше полностью избегать файловых систем, если дизайн системы позволяет это. В связи с этим вы упоминаете POSH. Я никогда не пробовал, но мы нашли Pyro ("PYthon Remote Objects") элегантным и эффективным решением в некоторых схожих случаях.

И конечно же есть стандартная библиотека multiprocessing модуль, который имеет некоторое сходство в том, как он взаимодействует между процессами. Я бы начал с этого для любой новой разработки в этой области, и перешел бы в другое место только в том случае, если бы она не получилась.

.
0
ответ дан 1 December 2019 в 14:21
поделиться
[

] Согласно статье Википедии [] о вызове mmap-системы[], содержимое отображенных файлов памяти [] при обновлении записывается обратно на диск[].[

]. [

] Смотрели ли Вы на мультипроцессорный модуль (в стандартной библиотеке) - особенно на часть Состояние деления между процессами?[

] [

]Рамфы, о которых упоминал Писквор, также кажутся хорошим решением - особенно когда не все процессы написаны на Пифоне.[

]
2
ответ дан 1 December 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: