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 CeleryprojEn 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.pycelery -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.pycé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 workercé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 ouvrierSi 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.