- Celeny peut fonctionner indépendamment de flask. Afin de maintenir la cohérence du projet, celeny est toujours défini sous lghome dans ce projet
2. Exemples de projets
- Ce projet utilise le modèle de développement producteur-consommateur pour l'envoi de messages courts et adopte le céleri
1. Réalisation initiale
1.1 Définir les tâches
- Installer le paquet de céleri
- Introduisez la classe Celery du paquet céleri: nommez-le à la maison, stockez les données dans redis et stockez-les dans la base de données 1 pour faciliter la distinction des autres données
- Créer un objet celery_app
- Définir la tâche d'envoi de SMS
from celery import Celery
celery_app=Celery("home",broken="redis://127.0.0.1:6379/1")
@celery_app.task
def send_sms(tid,mobile,datas):
'''发送短信异步任务'''
ccp=CCP()
ccp.send_message(tid,mobile,datas)
1.2 Invoquer celey
- La méthode d'appel d'origine est l'envoi synchrone, vous devez vous déconnecter et appeler céleri à la place
# lghome/api_1_0/verify_code.py
# # 发短信(同步发送)
# try:
# ccp = CCP()
# result = ccp.send_message(1,mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)))
# except Exception as e:
# logging.error(e)
# return jsonify(errno=RET.THIRDERR, errmsg='发送异常')
#
# # 返回值
# if result == 0:
# return jsonify(errno=RET.OK, errmsg='发送成功')
# else:
# return jsonify(errno=RET.THIRDERR, errmsg='发送失败')
# 发送短信(异步发送)
send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))
return jsonify(errno=RET.OK, errmsg='发送成功')
- Lors de l'appel pour envoyer des SMS, aucune capture d'exception n'est effectuée:
1.3 Démarrez le service: démarrez le travailleur du processeur de tâches
- Démarrez le service sur la ligne de commande:
céleri -A lghome.tasks.task_sms worker -l info
- Utilisez la commande suivante sous windwos
céleri -A lghome.tasks.task_sms worker -l info -P eventlet
- parmi eux:
- -A fait référence à l'application correspondante et son paramètre est l'emplacement de l'instance Celery dans le projet.
- Travailleur fait référence au travailleur à démarrer ici.
- -l fait référence au niveau de journalisation, tel que le niveau d'informations.
1.4 Test de vérification
2. Hiérarchie des répertoires de céleri
- Ce qui précède utilise du céleri pour réaliser des fonctions connexes, mais le répertoire n'est pas superposé. Au fur et à mesure que le projet devient de plus en plus grand, le répertoire doit être superposé pour garder la structure raisonnable et la planification des fonctions raisonnable.
- Construire un package sms dans le package de tâches pour envoyer des SMS (un package pour chaque fonction)
- La tâche du package (sms) doit être appelée tasks.py (vous ne pouvez pas la nommer arbitrairement)
- Créez un fichier d'entrée main.py dans le package de tâches
2.1 Définir les tâches
# lghome/tasks/sms/tasks.py
from lghome.tasks.main import celery_app
from lghome.libs.ronglianyun.ccp_SMS import CCP
@celery_app.task
def send_sms(tid, mobile, datas):
'''发送短信异步任务'''
ccp = CCP()
ccp.send_message(tid, mobile, datas)
2.2 Définir le fichier d'entrée
# lghome/tasks/main.py
from celery import Celery
# 创建celery对象
celery_app = Celery("home")
# 加载配置文件
celery_app.config_from_object("lghome.tasks.config")
# 注册任务
celery_app.autodiscover_tasks(["lghome.tasks.sms"])
2.3 Fichier de configuration
# lghome/tasks/config.py
# broker_url
BROKER_URL="redis://127.0.0.1:6379/1"
#
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'
2.4 appeler celey
# from lghome.tasks.task_sms import send_sms
from lghome.tasks.sms.tasks import send_sms
send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))
return jsonify(errno=RET.OK, errmsg='发送成功')
2.5 Démarrer le service: démarrer le processeur de tâches
- Démarrez le service sur la ligne de commande:
céleri -A lghome.tasks.main ouvrier -l info
- Utilisez la commande suivante sous windwos
céleri -A lghome.tasks.main worker -l info -P eventlet