Как лучше всего реализовать пул рабочих процессов, совместимых с Gevent?

StackOverflow https://stackoverflow.com/questions/5360050

Вопрос

Сценарий

У меня есть серверный процесс, реализованный в Python и Gevent, который подключается к бэкэнд -сервису по TCP/IP и обслуживает многих веб -клиентов (~ 1000 за процесс) с быстро меняющимся динамическим содержанием на основе изменений, внесенных в сервисную службу. Сервис работает на Ubuntu 10.04 и не работает в Windows, поэтому целевая платформа установлена. Мы используем Python 2.6.6, в настоящее время.

Проблема

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

Вопрос

Не могли бы вы указать мне на реализацию пула рабочих процессов для Gevent или выяснить, как я могу использовать собственный многопроцессный модуль Python с правильным образом?

Ограничения

Я хотел бы избежать введения потоков Python в наши процессы, поскольку это дало бы место для раздора GIL, что снизило бы производительность задержкой. Таким образом, это было бы чистое многопроцессорное решение + Gevent, если это возможно.

Это было полезно?

Решение

Я рекомендую взглянуть на Сельдерей - Распределенная система обработки задач, написанная на Python.

Основная идея с celery это то, что у вас есть очередь (либо RabbitMQ или же Redis), с работниками, написанными как процессы Python, и выставлены через celeryd демон. Согласно документации по сельдерею, celeryd Поддерживает работу gevent Режим также (для процессов, связанных с сетью ввода -вывода), поэтому, по -видимому, ваш код работника не нуждается в большой модификации для запуска в этой среде.

Другие советы

Я бы рассмотрел пользовательский сокет IPC или использование ZeromQ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top