run beat autodiscover_tasks and python django celery

python - autodiscover_tasks - django celery beat



¿Cómo purgar todas las tareas de una cola específica con apio en python? (3)

¿Cómo purgar todas las tareas programadas y en ejecución de una cola específica con apio en python? Las preguntas parecen bastante directas, pero para agregar no estoy buscando el código de línea de comando

Tengo la siguiente línea, que define la cola y me gustaría purgar esa cola para administrar las tareas:

CELERY_ROUTES = {"socialreport.tasks.twitter_save": {"queue": "twitter_save"}}

En 1 punto en el tiempo, quiero purgar todas las tareas en la cuenta twitter_save con código python, ¿tal vez con una función de transmisión? No pude encontrar la documentación sobre esto. es posible?


La respuesta original no funciona para el apio 3.1. La actualización de Hassek es el comando correcto si desea hacerlo desde la línea de comandos. Pero si quieres hacerlo programáticamente , haz esto:

Suponiendo que ejecutó su aplicación de apio como:

celery_app = Celery(...)

Entonces:

import celery.bin.amqp amqp = celery.bin.amqp.amqp(app = celery_app) amqp.run(''queue.purge'', ''name_of_your_queue'')

Esto es útil para los casos en los que ha puesto en cola un montón de tareas, y una tarea encuentra una condición fatal que sabe que evitará que se ejecuten el resto de las tareas.

Por ejemplo, puso en cola un montón de tareas del rastreador web, y en medio de sus tareas se bloquea la dirección IP de su servidor. No tiene sentido ejecutar el resto de las tareas. Entonces, en ese caso, tu tarea puede purgar su propia cola.


Lol es bastante fácil, espero que alguien pueda ayudarme todavía.

from celery.bin.camqadm import camqadm camqadm(''queue.purge'', queue_name_as_string)

El único problema con esto es que todavía necesito detener el apio antes de purgar la cola, después de purgar necesito ejecutar el apio nuevamente para manejar las tareas de la cola. Actualizaré esta pregunta si tengo éxito.

Lo logré, pero corríjame si este no es un buen método para detener el apio, purgar la cola y volver a iniciarla. Sé que estoy usando término, porque en realidad quiero que termine la tarea.

kill_command = "ps auxww | grep ''celeryd -n twitter_save'' | awk ''{print $2}'' | xargs kill -9" subprocess.call(kill_command, shell=True) camqadm(''queue.purge'', ''twitter_save'') rerun_command = "/home/samos/Software/virt_env/twittersyncv1/bin/python %s/manage.py celeryd -n twitter_save -l info -Q twitter_save" % settings.PROJECT_ROOT os.popen(rerun_command+'' &'') send_task("socialreport.tasks.twitter_save")


Solo para actualizar la respuesta de @Sam Stoelinga para el apio 3.1, ahora se puede hacer así en una terminal:

celery amqp queue.purge <QUEUE_NAME>

Para Django, asegúrese de iniciarlo desde el archivo manage.py:

./manage.py celery amqp queue.purge <QUEUE_NAME>

Si no es así, asegúrese de que el apio puede apuntar correctamente al corredor estableciendo el --broker= .