Nadie me ha amado, si alguien me trata bien, pensaré que he conocido a la persona adecuada, si estoy perturbado, realmente me avergüenzo.
Apio Django
1. El apio es una cola de tareas distribuida asincrónica.
2. Utilice escenarios:
Aplicación web: Cuando un usuario tarda mucho en completar una operación en el sitio web, podemos ceder esta operación a Celery para que la ejecute y devolverla directamente al usuario. Luego de que se ejecute Celery, se notificará al usuario para mejorar la concurrencia de el sitio web y la experiencia del usuario.
Incluye principalmente: intermediario de middleware de mensajes, trabajador de la unidad de ejecución de tareas, backend de almacenamiento de resultados
El módulo de tareas incluye tareas de cronometraje, ritmo de apio y tareas asincrónicas, tarea asíncrona
-
Las tareas asincrónicas generalmente se activan en la lógica empresarial y se envían a la cola de mensajes, mientras que las tareas cronometradas se envían periódicamente a la cola de mensajes mediante el proceso Celery Beat;
-
La unidad de ejecución de tareas Worker monitorea la cola de mensajes en tiempo real para obtener la ejecución de la tarea en la cola;
-
Una vez que Woker termine la tarea, guarde el resultado en Backend;
trabajador de apio -A cdscp -l depuración
El significado de cada parámetro:
trabajador: el rol que representa la startup es el trabajo
-A: ruta del proyecto cdscp
-l: nivel de registro de inicio
Inicie el trabajador, pero también necesita agregar tareas al trabajador a través de delay o apply_async
3. Ejemplo de demostración:
**
celery_task.py
import celery
import time
app = celery.Celery("celery_test",broker='redis://:@127.0.0.1:6379/0',backend='redis://:@127.0.0.1:6379/1')
@app.task
def send_email(param):
time.sleep(5)
print '向{}发送邮件'.format(param)
return "ok"
@app.task
def send_msg(param):
time.sleep(5)
print '向{}发送短信'.format(param)
return "ok"
produce_task.py
from celety_task import send_email, send_msg
result = send_email.delay('王子')
print result.id
result = send_msg.delay('王子')
print result.id
get_result.py
from celery.result import AsyncResult
from celety_task import app
ansyc_result = AsyncResult(id='f07403ed-90e0-42a1-b1bb-a2d75869495b', app=app)
if ansyc_result.successful():
result = ansyc_result.get()
print result
elif ansyc_result.failed():
print "failed"
elif ansyc_result.status == 'pending':
print 'pending'
elif ansyc_result.status == 'retry':
print 'retry'
elif ansyc_result.status == 'started':
print 'started'
celery worker -A celety_task -l info
Aparece la siguiente figura, que indica que el trabajador se ha iniciado correctamente
Después de que la tarea se ejecute con éxito, se generará la identificación de la tarea correspondiente, que se puede consultar en redis. El
resultado de la ejecución se obtiene a través del objeto AsyncResult de apio