Implementación de tareas asincrónicas de apio.

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.

Inserte la descripción de la imagen aquí

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

  1. 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;

  2. 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;

  3. 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:

** Estilo atrevido
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
Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
resultado de la ejecución se obtiene a través del objeto AsyncResult de apio
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_37304462/article/details/113920923
Recomendado
Clasificación