Pregunta

Guión

Tengo un proceso de servidor implementado en Python y Gevent, que se conecta a un servicio de back -end a través de TCP/IP y sirve a muchos clientes web (~ 1000 por proceso) con un contenido dinámico de rápido cambio basado en los cambios entregados por el servicio de backend. El servicio se ejecuta en Ubuntu 10.04 y no se ejecuta en Windows, por lo que la plataforma de destino se soluciona. Estamos usando Python 2.6.6, actualmente.

Problema

Servir los cambios en que muchos clientes pueden causar un retraso en el procesamiento de los cambios enviados por el backend, por lo que mi plan es dividir el servidor en múltiples procesos. Varios procesos de trabajadores servirían a los clientes web, mientras que el proceso principal aún estaría conectado al servicio de back -end. Ya estoy usando un grupo de Greenlets separado para servir a los clientes web, pero deben ser puestos en procesos de trabajadores.

Pregunta

¿Podría apuntarme a una implementación de grupo de procesos de trabajo para Gevent o averiguar cómo puedo usar el módulo de multiprocesamiento de Python con Gevent de la manera correcta?

Restricciones

Me gustaría evitar introducir hilos de Python en nuestros procesos, ya que eso daría espacio para la contención de Gil, lo que reduciría el rendimiento al introducir latencias. Por lo tanto, sería una solución limpia de multiprocesamiento + gevento, si es posible.

¿Fue útil?

Solución

Recomiendo echar un vistazo a Apio - Sistema de procesamiento de tareas distribuido escrito en Python.

La idea básica con celery es que tienes una cola (ya sea RabbitMQ o Redis), con trabajadores escritos como procesos de pitón y expuestos a través del celeryd demonio. Según la documentación de apio, celeryd admite correr en gevent El modo también (para procesos de E/S de red), por lo que presumiblemente su código de trabajador no necesitaría mucha modificación para ejecutarse en este entorno.

Otros consejos

Consideraría Socket IPC personalizado o usar ZEROMQ.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top