Flask Project 1 Real Combat: 2.5 Introduction et utilisation du céleri (à améliorer)

Insérez la description de l'image ici

(Selon le contenu de l'émission en direct de l'enseignant)
  • 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.
      Insérez la description de l'image ici

1.4 Test de vérification

Insérez la description de l'image ici

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
Insérez la description de l'image ici

2.6 Test de vérification

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/laoluobo76/article/details/110519866
conseillé
Classement