2010-04-22 23 views

risposta

2

La tua domanda è un po 'ambigua, ma suppongo che intendi che vorresti scrivere un demone python che elaborerà i lavori che vengono lanciati in una coda. In caso contrario, si prega di dire tanto. :-)

Ho sentito un sacco di grandi cose sui redis. I membri di github hanno creato resque come un demone di elaborazione dei processi per Ruby. Se sei flessibile per la lingua, puoi semplicemente usarlo, ma se non lo sei, puoi emularlo nel modo più o meno approfondito che ti piace usare come sistema di coda redis. A seconda di come è possibile collegarlo ed estendibile, questa potrebbe essere una cosa davvero semplice da implementare.

Un'altra opzione che ho trovato dopo un po 'di googling è redqueue. Sembra che potrebbe già implementare la maggior parte di una coda di lavoro.

Se si utilizza Django, è possibile prendere in considerazione il progetto Celery. È un sistema di coda di lavoro basato su RabbitMQ che è ancora un altro server di accodamento con recensioni eccellenti.

Per quanto riguarda la creazione di un demone in python, esistono numerose opzioni. Puoi guardare questo page on activestate, che è un buon inizio. Meglio ancora, è possibile utilizzare python-daemon per fare tutto per te. Ma se si utilizza una delle opzioni sopra o beanstalkd come raccomandato da mczepiel, probabilmente non si dovrà eseguire il processo come demone.

+0

ho visto python-daemon, è già abbastanza stabile? – Timmy

+0

Credo di sì, ma non ho avuto il tempo di leggere il suo codice o altro, quindi non posso esserne sicuro. – Benson

1

ho recentemente (questa settimana) implementato una coda in RabbitMQ con un demone python estraendo le informazioni e memorizzandole su un database (usando Django ORM). Il demone ha un buffer intermedio, quindi aspetterà un po 'e scriverà nel database in batch, invece di scrivere ogni volta che arriva un piccolo messaggio.

Ho effettuato l'integrazione con la coda utilizzando questo piccolo modulo flopsy, che è facile da configurare. L'unico problema che ho è di essere in grado di impostare un timeout per l'attesa di un messaggio, in quanto il modulo non ha un modo chiaro di farlo. Dopo un po 'di tempo con la shell interattiva e facendo alcuni dir(), riesco a raggiungere l'oggetto socket e impostare il timeout.

Ho considerato anche Celery, ma sembra essere più concentrato sull'utilizzo interno di un RabbitMQ per consentire di avviare attività (periodicamente o in modo asincrono), più che utilizzare una coda per comunicare con altri sistemi. Nel nostro caso, la coda può essere alimentata sia da sistemi Python che da quelli Ruby.

Una volta completato il processo, ho apportato alcune modifiche per consentire l'esecuzione come un daemon (principalmente memorizzando l'output standard in un file per consentire una registrazione facile) e quindi creare uno script bash che avvia un comando start-stop-daemon . Ho seguito più o meno questo schema Ho scoperto python-daemon quasi un giorno di ritardo, quindi dopo il lavoro non ha senso rivisitarlo, ma forse ha più senso per un progetto Python.