[PYTHON] J'ai essayé la mise en file d'attente des tâches de Celery

Objectif

Effectuer le traitement à l'aide de Celery, qui effectue un traitement de TaskQueue distribué J'ai décrit l'échantillon.

supposition

Installation

Installation de céleri


pip install celery

Dans le cas des fenêtres, céleri 4 ou version ultérieure n'est pas pris en charge, donc Spécifie la dernière version de Windows prise en charge.

Installation de céleri (fenêtres)


pip install celery==3.1.25

Code du travailleur

Utilisez la méthode de travail pour exécuter réellement le processus.

tasks.py


from celery import Celery

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

Commencez ceci en tant que travailleur. Utilisez Rabbit MQ démarré à 192.168.0.3. Spécifiez rpc: // où le résultat sera enregistré (il semble que ce soit le backend du résultat). S'il s'agit d'une production, il semble que Redis etc. sera la destination de stockage.

$ 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.

Il a démarré en toute sécurité.

Exécuter une tâche

Code de l'appelant et résultat de l'exécution

Code de l'appelant


>>> from tasks import add
>>> async_result = add.delay(1,2)
>>> async_result
<AsyncResult: 69bf0ccf-6e74-46e0-ae5a-1fb566bb0657>
#Il est lié au résultat stocké dans Redis etc. en utilisant uuid de AsyncResult???
>>> async_result.ready()
True
>>> async_result.result
3

Les tâches peuvent être mises en file d'attente en appelant avec la méthode delay. Le résultat peut être obtenu à partir de result après que le résultat de result.ready () devienne True.

Comportement du travailleur lors de l'appel

Comportement lors du lancement d'une tâche dans un worker qui a déjà été démarré. Autant que je puisse voir, il semble que la tâche spécifiée puisse être exécutée en toute sécurité.

Comportement du côté des travailleurs


[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

Enregistrer les résultats

Pour enregistrer le résultat de l'exécution de la tâche, spécifiez le backend lors de la création d'une instance de Celery. Cette fois, rpc: // est spécifié, mais il semble recommandé de le stocker dans Redis etc. en production. (https://blog.ozacc.com/docs/celery/getting-started/first-steps-with-celery.html#keeping-results)

Résumé

La mise en file d'attente des tâches avec Celery s'est avérée assez facile. Pour un mécanisme de traitement des tâches simple, utilisez Céleri + RabbitMQ + destination d'enregistrement des résultats. Il semble qu'il puisse être créé rapidement.

Matériel de référence

Recommended Posts

J'ai essayé la mise en file d'attente des tâches de Celery
J'ai essayé de récupérer les données de conversation d'ASKfm
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'utiliser Headless Chrome de Selenium
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé Python! ] Diplômé aujourd'hui de "Tout le monde Python! Qu'est-ce que Python!"!
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser anytree
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé PyCaret2.0 (pycaret-nightly)
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé la mapview de Kivy
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser PySpark de Jupyter 4.x sur EMR
J'ai essayé d'utiliser Jupyter
J'ai essayé de collecter des données sur un site Web avec Scrapy
J'ai essayé de déplacer EfficientDet
J'ai essayé la programmation shell
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé Auto Gluon
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé AWS Iot
J'ai essayé l'optimisation bayésienne!
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
[AWS] J'ai essayé d'utiliser EC2, RDS, Django. Construction de l'environnement à partir de 1
J'ai essayé d'extraire des caractères des sous-titres (OpenCV: édition tesseract-ocr)
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé d'envoyer un e-mail d'Amazon SES avec Python
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe