Tengo dos servidores: uno que ejecuta una aplicación django y otro que ejecuta tanto una cola rabbitmq como un apio. Mi tasks.py en el servidor que ejecuta la cola/trabajador contiene una tarea de la siguiente manera:Ejecutar una tarea de Apio cuando no se puede importar esa tarea
@task(queue="reports")
def test_task():
time.sleep(120)
Mi objetivo es ejecutar esta tarea desde una vista de Django. Como el código para la tarea está en un servidor diferente de la vista de django, me gustaría llamar a la tarea, estoy tratando de usar el siguiente código para enviar la tarea desde django a la máquina de trabajo.
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
me encontré con este método here, pero hasta ahora las pruebas que no ha funcionado.
Estoy probando con tail -F en el archivo de registro del trabajador de apio en el servidor de apio trabajador, luego navegando a la URL de la vista que contiene send_task en un navegador. Estoy buscando que la tarea aparezca como 'recibida' en el resultado final, pero no es así.
El nivel de registro del trabajador de apio es DEPURAR, el archivo de registro muestra que la tarea está registrada con el nombre propio, y la configuración de django settings.py contiene la IP y las credenciales correctas para el servidor rabbitmq. Al probar diferentes enfoques, de vez en cuando veo un mensaje de error en el archivo de registro de apio cuando cambio la cadena que pasó a send_task a algo que no era una tarea válida (es decir, send_task ('asdf')). Esto causó un error no registrado en el archivo de registro. Sin embargo, esto solo sucede a veces, y hasta ahora al probar diferentes combinaciones de configuraciones y llamadas, no he encontrado una manera de replicar de manera confiable el comportamiento.
Además, esta es la sección correspondiente del settings.py en el proyecto Django (con valores reales eliminado):
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
Googled alrededor y no he encontrado mucho en send_task. ¿Alguna idea sobre lo que podría estar haciendo mal?
Me gustaría saber cómo compartió su código entre ambas máquinas. Aquí hay una pregunta que escribí relacionada con eso: http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server ¡Gracias! – lajarre