Я реализовал этот шаблон в Python, где процесс супервизора порождает несколько процессов, а затем получает сообщения журнала от всех из них и записывает эти сообщения журнала в один файл журнала.
По сути, я использовал execve для запуска процессов, указанных для того, чтобы stderr для каждого процесса был подключен к PTY. Затем мой руководитель открыл все основные файлы PTY и использовал select
для чтения из них в цикле. PTY-файлы буферизуются в строке дисциплиной tty, и вы можете использовать readline на них для неблокирующих чтений. Я считаю, что я также использовал fcntl в PTY для установки os.O_NONBLOCK.
Отлично работает. Единственная проблема в том, что вам нужно прочитать более одной строки на pty, когда вы вернетесь из опроса select, иначе вы можете потерять вывод (при условии, что у вас есть что-то, что вызывает дочерние процессы и перезапускается). Читая все строки, доступные в каждом PTY, вы также избегаете чередования трассировок с другими сообщениями.
Если вам действительно нужно отправлять объекты, а не текстовые строки, тогда вам лучше использовать настоящую систему обмена сообщениями pub-sub, такую как AMQP или ZeroMQ. AMQP - намного больший молоток, чем вам нужно, поэтому проверяйте его, только если вы планируете создавать множество похожих приложений. В противном случае попробуйте более простую 0MQ http://www.zeromq.org/intro:read-the-manual, которая является просто библиотекой сообщений, которая значительно упрощает использование сокетов.