- 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.
1.4 Prueba de verificación
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