Можно ли запустить обратный вызов в python при обновлении общей памяти?

#python #c #callback #shared-memory

Вопрос:

Это указано в rpi. У меня запущен процесс c, который сбрасывает данные в общую память, и скрипт python, который отслеживает эту общую память на предмет обновления данных. Процесс C устанавливает флаги общей памяти, а сценарии python очищают флаги общей памяти. Python в настоящее время просто опрашивает, и я хотел бы уйти от этого, если это возможно. Процесс c непрерывно выполняется за пределами python и загружает данные ацп в буфер общей памяти. Каждое N число выборок процесс c устанавливает флаг готовности данных. Я написал этот процесс и поэтому могу изменить его, если потребуется. Мне интересно, есть ли какой-то способ для процесса c запустить обратный вызов в python, чтобы ему не нужно было опрашивать. Я надеюсь получить от всех вас некоторые идеи или, возможно, некоторые подсказки в правильном направлении. Спасибо!

Ответ №1:

Используйте именованный канал или FIFO. На странице Linux man fifo.7 :

Специальный файл FIFO (именованный канал) похож на канал, за исключением того, что доступ к нему осуществляется как к части файловой системы. Он может быть открыт несколькими процессами для чтения или записи. Когда процессы обмениваются данными через FIFO, ядро передает все данные внутри, не записывая их в файловую систему. Таким образом, специальный файл FIFO не содержит содержимого в файловой системе; запись в файловой системе служит просто точкой отсчета, чтобы процессы могли получить доступ к каналу, используя имя в файловой системе.

Именованные каналы могут быть созданы с mkfifo помощью команды.

Откройте канал для чтения в процессе Python. Чтение из FIFO должно блокироваться до тех пор, пока другой процесс не выполнит запись в канал.

Процесс C может записать небольшой фрагмент данных в канал, когда ему нужно разбудить процесс Python.

Комментарии:

1. Классно! Спасибо. Быстрый поиск по этой теме также привел к очереди общей памяти, которая может оказаться полезной. Спасибо!