2010-04-22 13 views

Respuesta

2

Su pregunta es un poco ambigua, pero supongo que quiere decir que le gustaría escribir un daemon de python que procesará los trabajos que se arrojan en una cola. Si no, por favor dígalo. :-)

He oído muchas cosas buenas sobre redis. La gente de github construyó resque como daemon de procesamiento de trabajos para Ruby. Si tiene un lenguaje flexible, puede usarlo, pero si no lo está, puede emularlo con la profundidad que desee utilizando redis como su sistema de cola. Dependiendo de lo conectable y extensible que necesite, esto podría ser algo muy simple de implementar.

Otra opción que encontré después de un poco más de google es redqueue. Parece que ya podría implementar la mayoría de la cola de trabajos.

Si está utilizando django, es posible que desee considerar el proyecto Celery. Es un sistema de cola de trabajos basado en RabbitMQ que es otro servidor de cola con excelentes críticas.

En cuanto a la creación de un daemon en python, hay una serie de opciones. Puede mirar este page on activestate, que es un buen comienzo. Mejor aún, puede usar python-daemon para hacerlo todo por usted. Pero si usa una de las opciones anteriores o beanstalkd como lo recomienda mczepiel, probablemente no tenga que hacer que su proceso se ejecute como daemon.

+0

vi python-daemon, ¿es suficientemente estable todavía? – Timmy

+0

Creo que sí, pero no me he tomado el tiempo para leer su código ni nada, así que no estoy seguro. – Benson

1

tengo recientemente (esta semana) implementó una cola en RabbitMQ con un daemon python extrayendo la información y almacenándola en una base de datos (usando Django ORM). El daemon tiene un buffer intermedio por lo que esperará un poco y escribirá en la base de datos en lotes, en lugar de escribir cada vez que llega un pequeño mensaje.

He hecho la integración con la cola usando este pequeño módulo flopsy, que es fácil de configurar. El único problema que tengo es que puedo configurar un tiempo de espera para esperar un mensaje, ya que el módulo no tiene una manera clara de hacerlo. Después de un tiempo jugando con el shell interactivo y haciendo unos pocos dir(), logro llegar al objeto socket y configurar el tiempo de espera.

que considera también Celery, pero parece estar más centrado en el uso de su interior un RabbitMQ que permitirá poner en marcha tareas (periódicamente o de forma asíncrona), más que el uso de una cola para la comunicación con otros sistemas. En nuestro caso, la cola puede alimentarse tanto por sistemas Python como por Ruby.

Una vez que he completado el proceso, he hecho algunos ajustes para permitir que se ejecute como daemon (principalmente almacenando la salida estándar en un archivo para permitir un registro fácil) y luego creo un script bash que inicia un comando start-stop-daemon . Seguí más o menos esto schema Descubrí python-daemon con un retraso de un día, por lo que una vez finalizado el trabajo, no tiene sentido volver a visitarlo, pero tal vez tenga más sentido para un proyecto de Python.