#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. Классно! Спасибо. Быстрый поиск по этой теме также привел к очереди общей памяти, которая может оказаться полезной. Спасибо!