[Python] Django e celery

Karim lemieliste a gmail.com
Sab 21 Ott 2017 00:27:13 CEST


Ciao lista, ciao Marco De Paoli. Ecco un breve riassunto del passaggio da
Celery a Django-Q

Primo giorno: Iniziata la transizione a Django-Q

1) Installato django-q, configurazione di base su redis
2) Provato a far partire il primo task con "async". Perfetto. Funziona.
3) Rimosso celery e tutta la merda che lo circonda (che soddisfazione!)
4) Convertito tutti i ".delay" di celery ad "async" di django-q
5) Rimosso tutti i task registrati con il decoratore (li usavo con
celerybeat)

-> Faccio partire tests
Dimenticato alcuni imports e altri riferimenti. Cancella! Cancella! Edita!
Edita!

Ora i tests iniziano a darmi qualche problema. Ci sto lavorando. Ho 400
test circa e 80 mi stanno facendo il middlefinger.
Inoltre i log di django_q non mi vanno a braccetto con gli altri log.


Secondo giorno

Aggiornato errori e aggiornati i tests.
Ho dovuto, per ora, disabilitare il 'retry' in due tasks costruiti per
celery che richiamavano se stessi in caso di errore. Vedrò di convertirli a
Django-Q.
Ho dovuto cambiare varie classi da subclass di TestCase a subclass di
TransictionalTestCase per evitare problemi con la connessione al database.
Come risultato, molto tests ora sono decisamente più lenti.

Due test in particolare li ho dovuti disabilitare. Passano se li lancio
individualmente, ma non funzionano nel test harness.
Ho risolto anche il problema del log. Stranamente devi registrare
`django-q` nel logging, ma l'import viene fatto come `django_q`. L'ho
scoperto leggendo il codice di django-q.
Faccio il primo deploy, sostituendo tutto cio' che riguarda celery. La
semplicita' e' tale che funziona da subito. Verifico sul server e si, i
task vengono aggiunti e processati.
Faccio partire l'autoscaling ed il secondo cluster viene aggiunto e i task
mistati.
Provo ad aggiungere lo scheduling direttamente da django admin. I task
vengono processati. Niente doppioni, niente cazzate. Tutto funziona.


PRO:
- Facilissimo da configurare
- Usa Django Admin per i successful tasks, failed tasks e lo scheduling
- Un solo processo da avviare sul server
- Conversione del codice da Celery a Django-Q semplice
- Usa Django!


CONTRO:
- Non ha tutte le feature di Celery, ma a me sinceramente non serve
- Non esiste un monitor dei tasks in coda a meno che non usi Django ORM
come broker. Devi ripiegare su qualcosa per il tuo broker


-- 
Karim N. Gorjux
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20171021/3479b77d/attachment.html>


Maggiori informazioni sulla lista Python