2011-02-02 5 views
2

У меня есть много процессов, которые порождаются отдельно, а не от родителя к дочернему. Процессам необходимо отправить сообщение конкретным процессам. Адрес получаемых процессов (pid) может храниться в базе данных, но процессы не могут совместно использовать общие переменные в памяти.Многопроцессорность Python с несвязанными процессами

Я не мог найти способ сделать это с помощью пакета pythons multiprocess, и теперь я смотрю на сервер на основе сокетов, но эта проблема все же оставила мне любопытной, если такая архитектура может быть достигнута при многопроцессорности - преимущество будет чтобы легко пройти подбираемые предметы.

ответ

2

Процессы должны отправлять сообщения определенным процессам. Адрес получаемых процессов (pid) может храниться в базе данных, но процессы не могут совместно использовать общие переменные в памяти.

База данных? Зачем? Для этого каждый использует файл, поскольку файл дешевый, доступный, и вы сохраняете только одно целочисленное значение.

Также. Поскольку вы собираетесь использовать файл, у вас есть более интересные варианты.

  1. Каждый процесс записывает сообщение в именованный канал. Процесс получения принимает запросы от именованного канала.

  2. Каждый процесс записывает сообщение в файл. Простая блокировка гарантирует, что только один процесс за один раз имеет доступ к файлу, обеспечивая сериализацию. Процесс получения читается из этого файла.

  3. Каждый процесс использует HTTP для запроса RESTful к процессу получения. В процессе приема используется обработанная инфраструктура HTTP-сервера для обработки запросов.

  4. Каждый процесс использует очередь сообщений для размещения сообщений в очереди. Процесс приема отменяет сообщения. Очередь - это файл.

etc. И да, их больше. Но они начинают определять ОС.