2012-11-18 11 views
49

Attualmente sto lavorando su un progetto python che richiede l'implementazione di alcuni processi in background (principalmente per l'invio di e-mail e gli aggiornamenti di database). Io uso Redis per il task broker. Quindi a questo punto ho due candidati: Celery e RQ. Ho avuto qualche esperienza con queste code di lavoro, ma voglio chiederti ragazzi di condividere la tua esperienza sull'uso di questi strumenti. Così.Pro e contro per usare Celery vs. RQ

  1. Quali vantaggi e svantaggi usare Celery vs. RQ.
  2. Qualsiasi esempio di progetto/attività adatto all'uso di Celery vs. RQ.

Il sedano sembra piuttosto complicato ma è una soluzione completa. In realtà non penso di aver bisogno di tutte queste funzionalità. Dall'altra parte RQ è molto semplice (ad es. Configurazione, integrazione), ma sembra che manchi alcune utili funzionalità (ad esempio revoca delle attività, ricaricamento automatico del codice)

+2

Sfortunatamente, questo tipo di domanda non si adatta al formato di questo sito, vedere [FAQ # dontask]. Domande come queste tendono a portare a risposte vaghe che sono anche superate molto rapidamente. Se possiamo aiutarti con un problema specifico, sentiti libero di postare un'altra domanda! –

+0

BTW mi sembra come se fosse possibile revocare le attività, anche con rq-dashboard –

risposta

60

Ecco cosa ho trovato mentre cercavo di rispondere a questa stessa identica domanda. Probabilmente non è completo e potrebbe anche essere impreciso su alcuni punti.

In breve, RQ è progettato per essere più semplice in tutto. Il sedano è progettato per essere più robusto. Sono entrambi eccellenti.

  • Documentazione. RQ's documentation è completo senza essere complesso e rispecchia la semplicità generale del progetto - non ti senti mai perso o confuso. Celery's documentation è anche completo, ma ci si aspetta di rivederlo parecchio quando si impostano le cose per la prima volta poiché ci sono troppe opzioni per internalizzare
  • Monitoraggio. Celery's Flower e RQ dashboard sono entrambi molto semplici da configurare e ti danno almeno il 90% di tutte le informazioni che vorresti.

  • Supporto broker. Celery è il chiaro vincitore, RQ supporta solo Redis. Ciò significa meno documentazione su "che cos'è un broker", ma significa anche che non puoi cambiare broker in futuro se Redis non funziona più per te. Ad esempio, Instagram considered both Redis and RabbitMQ with Celery. Questo è importante perché diversi broker hanno garanzie diverse, ad es. Redis non può (al momento della scrittura) garantisce al 100% che i tuoi messaggi siano consegnati.

  • Code prioritarie. Il modello di coda priorità RQs è semplice ed efficace: workers read from queues in order. Il sedano richiede la rotazione di più lavoratori da consumare da diverse code. Entrambi gli approcci funzionano

  • Supporto OS. Celery è il chiaro vincitore qui, poiché RQ funziona solo su sistemi che supportano fork, ad es. Sistemi Unix

  • Supporto lingue. RQ supporta solo Python, mentre Celery consente di inviare attività da una lingua a un'altra lingua

  • API.Celery è estremamente flessibile (più backend di risultati, bel formato di configurazione, supporto per il workflow canvas) ma naturalmente questo potere può essere fonte di confusione. Al contrario, l'API RQ è semplice.

  • Supporto del sottotask. Celery supporta le attività secondarie (ad esempio creando nuove attività all'interno delle attività esistenti). Non so se RQ fa

  • Comunità e Stabilità. Probabilmente il sedano è più consolidato, ma entrambi sono progetti attivi. Come della scrittura, sedano ha ~ 3500 stelle su GitHub mentre RQ ha ~ 2000 e entrambi i progetti mostrare sviluppo attivo

A mio parere, sedano non è così complesso come la sua reputazione potrebbe portare a credere, ma si devono RTFM.

Quindi, perché qualcuno dovrebbe essere disposto a scambiare il sedano (probabilmente più completo) per RQ? Nella mia mente, tutto si riduce alla semplicità. Limitando se stesso a Redis + Unix, RQ fornisce una documentazione più semplice, una base di codice più semplice e un'API più semplice. Ciò significa che tu (e potenziali contributori al tuo progetto) puoi concentrarti sul codice che ti interessa, invece di dover mantenere i dettagli sul sistema delle code delle attività nella tua memoria di lavoro. Abbiamo tutti un limite al numero di dettagli che possono esserci nella nostra testa in una sola volta e, eliminando la necessità di mantenere i dettagli della coda delle attività, RQ consente di tornare al codice che ti interessa. Questa semplicità viene a scapito di funzionalità come code di attività interlinguistiche, ampio supporto del sistema operativo, garanzie di messaggi affidabili al 100% e possibilità di cambiare facilmente i broker di messaggi.

1

Il sedano non è così complicato. Al suo interno, esegui la configurazione passo passo da tutorials, crea un'istanza celery, decora la tua funzione con @celery.task quindi esegui l'attività con my_task.delay(*args, **kwargs).

A giudicare dalla tua valutazione, sembra che tu debba scegliere tra carenza di funzionalità (chiave) o eccesso di spazio. Non è una scelta troppo difficile nel mio libro.

+16

Non sono affatto d'accordo con la vostra valutazione. Ho faticato per un paio di settimane per far funzionare con successo il Celery sul mio server Debian, anche dopo aver letto gran parte della documentazione e numerosi post sul blog. Il problema principale che ho avuto è stato che se avevi qualcosa di sbagliato nella tua configurazione, Celery non avrebbe fornito * nessun * feedback su quale potrebbe essere il problema. E quando finalmente ho funzionato, ho iniziato a recuperare qualche tipo di OS OSrror in profondità nello stack di Celery. Ho pubblicato un problema su Github ma nessuno poteva aiutarti. Non toccherò più il sedano con un palo da dieci piedi. – William