У меня два процесса: один C и один python. Процесс C тратит свое время на передачу данных на именованный канал, который затем обрабатывает процесс python. Должно быть довольно просто, и он отлично работает, когда я передаю данные (в настоящее время временную метку, такую как «Mon Aug 19 18:30:59 2013») раз в секунду.Состояние именования труб?
Проблемы возникают, когда я вынимаю сон (1); команды в процессе C. Когда нет никакой второй задержки, связь быстро закручивается. Процесс python будет читать более одного сообщения или отчета, чтобы он считывал данные, даже если его буфер пуст. На этом этапе процесс C обычно бомбит.
Прежде чем я отправлю какой-либо пример кода, мне интересно, нужно ли мне выполнять какую-то синхронизацию с обеих сторон. Как, может быть, говорить, что C-процесс не записывается в fifo, если он не пуст?
Процесс C открывает только именованный канал, и процесс python открывается только как прочитанный.
Оба процесса предназначены для работы в виде петель. Процесс C непрерывно считывает данные по мере того, как он поступает через USB-порт, и процесс python принимает каждое «сообщение» и анализирует его перед отправкой его на SQL Db.
Если я собираюсь просматривать до 50 сообщений в секунду, будут ли названные каналы иметь возможность обрабатывать этот уровень скорости транзакции? Размер каждой транзакции относительно невелик (20 байт или около того), но частота заставляет меня задаться вопросом, следует ли мне смотреть на другую форму межпроцессного общения, например, на разделяемую память?
Любые советы, оцененные. Я могу отправить код, если это необходимо, но на данный момент мне просто интересно, нужно ли мне как-то синхронизировать между этими двумя процессами.
Спасибо!
Можете ли вы привести более конкретный пример того, как сообщение завязано? Что вы имеете в виду бомбы C-процесса? Ошибки сегментации? Дает ли он какой-либо результат, когда он бомбит? – joshlf
Смешная вещь о процессе C - оператор записи на данный момент находится в основном в (1) бесконечном цикле. Когда он сбой, он просто возвращается в приглашение оболочки ... no segfaults. Я обнаружил, что могу воссоздать это поведение в процессе C с помощью CTRL-Cing процесса python. Я бы подумал, что процесс C просто вернется в состояние блокировки записи. – dermur
Я заменил sleep (1) циклом for, который эффективно позволяет процессу C делать около 50 записей в секунду. Кажется, это работает нормально, но я бы хотел, чтобы это продолжалось не менее 48 часов, чтобы быть уверенным в этом. – dermur