Frasco proyecto 1 combate real: 2.5 Introducción y uso del apio (para mejorar)

Inserte la descripción de la imagen aquí

(Según el contenido de la transmisión en vivo del maestro)
  • Celeny puede funcionar independientemente del matraz. Para mantener la coherencia del proyecto, celeny todavía se define en lghome en este proyecto.

2. Ejemplos de proyectos

  • Este proyecto utiliza el modelo de desarrollo productor-consumidor para enviar mensajes cortos y adopta el apio

1. Realización inicial

1.1 Definir tareas

  • Instalar el paquete de apio
  • Introduzca la clase Apio del paquete de apio: nómbrelo en casa, almacene los datos en redis y guárdelos en la base de datos 1 para la conveniencia de distinguirlos de otros datos
  • Crear objeto celery_app
  • Definir la tarea de envío 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 Invocar celey

  • El método de llamada original es el envío sincrónico, debe cerrar la sesión y llamar a celery en su lugar
	# 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='发送成功')
  • Al llamar para enviar SMS, no se realiza ninguna captura de excepción:

1.3 Iniciar el servicio: iniciar el trabajador del procesador de tareas

  • Inicie el servicio en la línea de comando:

apio -Un trabajador lghome.tasks.task_sms -l info

  • Utilice el siguiente comando en windwos

apio -A lghome.tasks.task_sms worker -l info -P eventlet

  • entre ellos:
    • -A se refiere a la aplicación correspondiente y su parámetro es la ubicación de la instancia de Celery en el proyecto.
    • Trabajador se refiere al trabajador que se iniciará aquí.
    • -l se refiere al nivel de registro, como el nivel de información.
      Inserte la descripción de la imagen aquí

1.4 Prueba de verificación

Inserte la descripción de la imagen aquí

2. Jerarquía de directorios de apio

  • Lo anterior usa apio para lograr funciones relacionadas, pero el directorio no tiene capas. A medida que el proyecto se vuelve más y más grande, el directorio debe tener capas para mantener la estructura razonable y la planificación de funciones razonable
  • Cree un paquete de SMS en el paquete de tareas para enviar SMS (un paquete para cada función)
  • La tarea del paquete (sms) debe llamarse tasks.py (no puede nombrarlo arbitrariamente)
  • Cree un archivo de entrada main.py en el paquete de tareas

2.1 Definir tareas

# 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 Definir el archivo de entrada

# 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 Archivo de configuración

# 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 llamar a 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 Iniciar servicio: iniciar el trabajador del procesador de tareas

  • Inicie el servicio en la línea de comando:

apio -Un trabajador lghome.tasks.main -l info

  • Utilice el siguiente comando en windwos

apio -A lghome.tasks.main worker -l info -P eventlet
Inserte la descripción de la imagen aquí

2.6 Prueba de verificación

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/laoluobo76/article/details/110519866
Recomendado
Clasificación