2017-09-19 4 views
0

Ich möchte Sie fragen über Sellerie und Redis Verwendung in Django App. Ich lerne über Sellerie für etwa 2 Tage und bin immer noch ein wenig verwirrt:/Ich habe Sellerie und Redis installiert und es funktioniert gut. Mein Problem ist, dass der Benutzer periodische Aufgaben erstellen, aktualisieren und aussetzen soll. Ich habe diesen Artikel gelesen - http://kindshofer.net/2016/11/19/dynamically_adding_a_periodic_task_to_celery.html und diese Frage - How to dynamically add/remove periodic tasks to Celery (celerybeat) ein Loooot von anderen Artikeln, aber nicht so nützlich wie diese beiden), und es scheint, dass ich Django-Sellerie verwenden muss. Ich dachte, dass es eine gute Option ist, aber dann habe ich gelesen (hier ->https://github.com/celery/django-celery), dass Django-Sellerie verwendet Django Ergebnis Backend (es bedeutet - meine db, Rigth? Und ich möchte Redis verwenden!). Ist es möglich, Django-Sellerie mit Redis zu verwenden? Vielleicht mit Django-Sellerie brauche ich nicht wieder zu verwenden? Vielleicht gibt es eine andere Möglichkeit, den Benutzer regelmäßige Aufgaben erstellen zu lassen? Ich brauche wirklich meine regelmäßigen Aufgaben, um schnell und leicht zu sein, weil es eine Menge von ihnen geben wird und sie müssen makellos sein (und deshalb dachte ich, dass ich sie woanders hinschieben muss). Ich würde wirklich alle Vorschläge zu schätzen wissen!Lassen Sie den Benutzer Sellerie periodische Aufgaben erstellen

Antwort

0

Ich glaube, Sie machen einige Verwirrung ... Sellerie braucht Redit Server als Message Broker und diese 2 Dinge müssen global in Ihrem System installiert werden .. Um diese 2 Tools mit Django zu integrieren, installieren Sie (die beste Wahl wäre in Ihrer virtuellen Umgebung) django_cellery_beat für periodische Aufgaben mit crontab und django_cellery_results, um Sellerie-Aufgaben mit dem Django zu speichern ...

Natürlich ist es möglich, den Benutzer zu starten und benutzerdefinierte periodische Aufgaben zu erstellen. Sie könnten (In Ihrer Vorlage, mit einem Formular) nehmen Sie Benutzereingaben und in Ihren Ansichten, nehmen Sie diese Eingabe und übergeben Sie sie an eine Funktion in Ihrer Datei tasks.py .. Auf Ihrer tasks.py können Sie eine Funktion machen, die Aufgaben macht!

Dieses Handbuch ist sehr nützlich: https://github.com/codingforentrepreneurs/Guides/blob/master/all/Celery_Redis_with_Django.md

1

Schnell und leicht und redis == Python RQ. Job Suspendierung kann jedoch ein Problem sein.

Zum Sellerie-Problem: Das Ergebnis-Backend speichert nur Ergebnisse. Es verarbeitet die Warteschlangen nicht. Aber selbst dann können Sie die Ergebnisse zu Redis senden:

CELERY_RESULT_BACKEND = 'django-cache' 

konfigurieren cache:

CACHES = { 
    "default": { 
     "BACKEND": "django_redis.cache.RedisCache", 
     "LOCATION": "redis://127.0.0.1:6379/1", 
     "OPTIONS": { 
      "CLIENT_CLASS": "django_redis.client.DefaultClient", 
     } 
    } 
} 

jedoch - der Grund, das django-db Backend zu verwenden, ist, dass es möglich ist, querysets über die Ergebnisse zu erstellen. Dies ist in der Regel sinnvoller, da Ergebnisse in Ansichten angezeigt werden und Jobs in der Regel nicht. Die Fähigkeit, Ergebnisse zu aggregieren (wie die durchschnittliche Ausführungszeit eines Jobs) und Graphen zu erstellen, ist in Django sehr nützlich und viel einfacher zu erreichen, wenn das ORM dann selbst in Python mit einem Schlüssel/Wert-Speicher sortiert/aggregiert wird.

Verwandte Themen