[PYTHON] Ich habe versucht, Aufgaben bei Sellerie in die Warteschlange zu stellen

Zweck

Führen Sie die Verarbeitung mit Celery durch, das die verteilte TaskQueue-Verarbeitung durchführt Ich habe die Probe beschrieben.

Annahme

Installation

Installation von Sellerie


pip install celery

Bei Fenstern wird Sellerie 4 oder höher nicht unterstützt Gibt die letzte unterstützte Windows-Version an.

Installation von Sellerie (Fenster)


pip install celery==3.1.25

Arbeitercode

Verwenden Sie die Worker-Methode, um den Prozess tatsächlich auszuführen.

tasks.py


from celery import Celery

app = Celery('tasks', result='rpc://', broker='amqp://[email protected]//')
@app.task
def add(x, y):
    return x, y

Beginnen Sie dies als Arbeiter. Verwenden Sie Rabbit MQ, das um 192.168.0.3 gestartet wurde. Geben Sie rpc: // an, wo das Ergebnis gespeichert werden soll (es scheint das Ergebnis-Backend zu sein). Wenn es sich um eine Produktion handelt, scheint Redis usw. das Speicherziel zu sein.

$ celery -A tasks worker --loglevel=info

the ability to execute any command.  It's important to secure
your broker from unauthorized access when using pickle, so we think
that enabling pickle should require a deliberate action and not be
the default choice.

If you depend on pickle then you should set a setting to disable this
warning and to be sure that everything will continue working
when you upgrade to Celery 3.2::

    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

You must only enable the serializers that you will actually use.


  warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED))

 -------------- celery@DESKTOP-GJOIME5 v3.1.25 (Cipater)
---- **** -----
--- * ***  * -- Windows-10-10.0.14393-SP0
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x22d0e56d080
- ** ---------- .> transport:   amqp://guest:**@192.168.0.3:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . tasks.add

[2017-06-19 06:45:10,040: INFO/MainProcess] Connected to amqp://guest:**@192.168.0.3:5672//
[2017-06-19 06:45:10,118: INFO/MainProcess] mingle: searching for neighbors
[2017-06-19 06:45:11,262: INFO/MainProcess] mingle: all alone
[2017-06-19 06:45:11,332: WARNING/MainProcess] celery@DESKTOP-GJOIME5 ready.

Es begann sicher.

Eine Aufgabe ausführen

Anrufercode und Ausführungsergebnis

Anrufercode


>>> from tasks import add
>>> async_result = add.delay(1,2)
>>> async_result
<AsyncResult: 69bf0ccf-6e74-46e0-ae5a-1fb566bb0657>
#Es wird mit dem in Redis usw. gespeicherten Ergebnis unter Verwendung der UUID von AsyncResult verknüpft???
>>> async_result.ready()
True
>>> async_result.result
3

Aufgaben können durch Aufrufen mit der Verzögerungsmethode in die Warteschlange gestellt werden. Das Ergebnis kann aus dem Ergebnis erhalten werden, nachdem das Ergebnis von result.ready () True geworden ist.

Arbeiterverhalten beim Anruf

Verhalten beim Werfen einer Aufgabe in einen bereits gestarteten Worker. Soweit ich sehen kann, scheint es, dass die angegebene Aufgabe sicher ausgeführt werden kann.

Verhalten auf der Arbeiterseite


[2017-06-19 06:56:23,934: INFO/MainProcess] Received task: tasks.add[ff679978-8edd-47db-b599-79aa3c8844eb]
[2017-06-19 06:56:23,934: INFO/MainProcess] Task tasks.add[ff679978-8edd-47db-b599-79aa3c8844eb] succeeded in
0s: 3

Ergebnisse speichern

Geben Sie beim Speichern einer Sellerie-Instanz das Backend an, um das Ergebnis der Aufgabenausführung zu speichern. Dieses Mal wird rpc: // angegeben, es wird jedoch empfohlen, es im Produktionsbetrieb in Redis usw. zu speichern. (https://blog.ozacc.com/docs/celery/getting-started/first-steps-with-celery.html#keeping-results)

Zusammenfassung

Das Anstehen bei Sellerie erwies sich als ziemlich einfach. Verwenden Sie für einen einfachen Mechanismus zur Aufgabenverarbeitung das Ziel zum Speichern von Sellerie + RabbitMQ + Ergebnis. Es scheint, dass es schnell erstellt werden kann.

Referenzmaterial

Recommended Posts

Ich habe versucht, Aufgaben bei Sellerie in die Warteschlange zu stellen
Ich habe versucht, Konversationsdaten von ASKfm zu kratzen
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, Headless Chrome von Selenium zu verwenden
Ich habe PyQ ausprobiert
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe Python ausprobiert! ] Heute Abschluss von "Jeder Python! Was ist Python!"!
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe PyCaret2.0 (pycaret-nightly) ausprobiert.
Ich habe versucht, tief zu lernen
Ich habe AWS CDK ausprobiert!
Ich habe versucht zu debuggen.
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe Kivys Kartenansicht ausprobiert
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, PySpark von Jupyter 4.x auf EMR zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln
Ich habe versucht, EfficientDet zu verschieben
Ich habe versucht, Shell zu programmieren
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Dropout zu erklären
Ich habe versucht, doctest zu verwenden
Ich habe Python> Decorator ausprobiert
Ich habe versucht, TensorFlow auszuführen
Ich habe Auto Gluon ausprobiert
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe AWS Iot ausprobiert
Ich habe die Bayes'sche Optimierung ausprobiert!
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
[AWS] Ich habe versucht, EC2, RDS, Django zu verwenden. Umweltbau ab 1
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: tesseract-ocr edition)
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, mit Python eine E-Mail von Amazon SES zu senden
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Ich habe versucht, [eine bestimmte Aufgabe] mit einem Raspeltorte zu automatisieren