Céleri. cadre de traitement de la file d'attente de travaux python. Faites attendre le démon de travail pour créer un mécanisme de traitement de synchronisation ou démarrez le démon de battement pour créer un traitement par lots planifié. La documentation est bien entretenue.
En termes de flux de traitement, il est proche de penser qu'un planificateur de tâches est attaché à une partie de traitement comme AWS lambda ou IBM bluemix OpenWhisk. Je suis reconnaissant de pouvoir procéder à la division du traitement sans me soucier de la définition de l'API.
Si vous souhaitez utiliser un travail asynchrone, démarrez le démon worker.
Je lance le démon avec celery -A proj worker
, mais il est difficile de comprendre comment spécifier proj!
Les règles approximatives sont comme ça.
modname: varname
doit être une instance Celery s'il y a un: ʻ dans la chaîne
proj`proj.app
n'est pas un module, il doit s'agir d'une instance Celery (hé)proj.cellery
n'est pas un module, il doit s'agir d'une instance Celery (hmm)proj.celry
est un moduleproj.cellery.app
n'est pas un module, il doit s'agir d'une instance Celery (hé)proj.celry.cellery
n'est pas un module, il doit s'agir d'une instance Celery (hmm)proj.cellery
pour une instance de sous-classe de Celeryproj
En d'autres termes, pour donner un exemple ...
somename.py
dans le répertoire courant
Si la variable d'instance Celery x existecéleri -A somename: x worker
. Oucéleri -A somename worker
.somename / __ init __. Py
vu depuis le répertoire courant
Si la variable d'instance Celery x existecéleri -Un ouvrier somename: x
. Oucéleri -A somename worker
.somename / __ init __. Py
existe et
Si la variable d'instance Celery x existe dans le fichier somename / celery.py
celery -A somename.cellery: x worker
. Oucéleri -Un ouvrier somename
.from __future__ import absolute_import
(python 2)somename / __ init __. Py
existe et
Si la variable d'instance Celery x existe dans le fichier somename / subname.py
céleri -A somename.subname: x worker
. Oucéleri -A somename.subname worker
. existe dans le module
somename` dans le chemin de recherche du module, supposez qu'il s'agit d'une instance Celery.céleri -A somename: application worker
.céleri -Un ouvrier somename
.somename
dans le chemin de recherche du modulecéleri -A somename: x worker
.céleri -Un ouvrier somename
.somename.cellery
peut être chargé et que la variable d'instance Celery x y existecéleri -A somename.cellery: x worker
céleri -Un ouvrier somename.corner
.céleri -Un ouvrier somename
.from __future__ import absolute_import
(python 2)Si vous regardez attentivement, l'apparence de l'application changera légèrement en fonction du modèle.
celery -A somename worker
...
- ** ---------- [config]
- ** ---------- .> app: __main__:0x106a950
celery -A somename worker
...
- ** ---------- [config]
- ** ---------- .> app: somename:0x1585410
La cause déroutante est les règles spéciales «proj.app» et «proj.cellery».
Les cas extrêmement déroutants ne sont pas expliqués dans Flask Documentation. Flask crée généralement une variable d'instance Flask ʻapp. Cependant, céleri pense aussi qu'il doit s'agir d'une instance Celery si une variable ʻapp
est trouvée, donc il y a une divergence.
Une solution de contournement serait, par exemple:
:
céleri -A votre_application: céleri ouvrier
Si vous souhaitez créer un lot planifié, démarrez un démon de battement.
celery -A somename beat
Démarrez-le séparément du démon de travail. Ce n'est fondamentalement pas mis à l'échelle, vous devez donc être prudent lorsque vous l'utilisez.
Notez également que les paramètres de planification ne peuvent pas être intégrés dans le programme et seront répertoriés dans le fichier des paramètres de base.
Je ne comprends pas vraiment la relation entre la file d'attente et le céleri ... Est-ce que c'est l'image ...?
Postscript: Vous avez maintenant l'option kafka + faust.