Запрос предложений о проведении IPC/ захвата событий

У меня есть простой скрипт сервера Python, который разветвляется несколько экземпляров (скажем, N) программы C++. Программа C++ генерирует некоторые события, которые должны быть перехвачены.

События в настоящее время записываются в файл журнала (1 файл журнала на разветвленный процесс). Кроме того, мне нужно периодически (T минут) получать скорость, с которой события генерируются во всех дочерних процессах, либо на сервер python, либо в какую-либо другую программу, прослушивающую эти события (все еще не уверенную). В зависимости от частоты этих событий сервер может предпринять некоторые "повторные действия" (скажем, уменьшить количество разветвленных экземпляров)

Некоторые указатели, на которые я кратко посмотрел:

  • файлы журнала grep - просмотрите файлы журнала запущенных процессов (.running), отфильтруйте записи, сгенерированные за последние T минут, проанализируйте данные и составьте отчет
  • socket ipc - добавить код в программу C++ для отправки событий в какую-либо серверную программу, которая анализирует данные через T минут, сообщает и запускается заново
  • redis/memcache (не уверен полностью) - добавьте код в программу на C++, чтобы использовать распределенное хранилище для сбора всех сгенерированных данных, анализа данных через T минут, создания отчетов и повторного запуска

Пожалуйста, дайте мне знать ваши предложения.

Спасибо

2 ответа

Решение

Если время не имеет существенного значения (T минут звучит так, как будто оно длинное по сравнению с какими-либо событиями, происходящими в запускаемых программах на C++), то не усложняйте ситуацию, чем нужно. забудьте IPC (сокеты, общий доступ к памяти и т. д.), просто сделайте так, чтобы каждая программа C++ записывала в журнал то, что вам нужно знать о времени / производительности, и позволяйте скрипту python проверять журналы каждые T минут, что вам нужны данные. не тратьте время на усложнение того, что вы можете сделать простым способом

Как альтернатива вашему IPC сокету, как насчет 0mq. Это библиотека (в C с доступными привязками Python), которая может передавать сообщения на уровне между потоками, между процессами или между машинами. Довольно просто начать и довольно быстро.

Я не связан с этим. Я просто оцениваю его для других целей и подумал, что он может подойти и вам.

Другие вопросы по тегам