2012-10-02 24 views
19

que necesitan para depurar tarea Apio desde el depurador de Eclipse. Estoy usando Eclipse, PyDev y Django.cómo depurar tareas Apio/Django se ejecutan localmente en Eclipse

En primer lugar, puedo abrir mi proyecto en Eclipse y poner un punto de interrupción en el comienzo de la función de la tarea.

Luego, estoy iniciando los trabajadores de Apiler de Eclipse haciendo clic con el botón derecho en manage.py desde PyDev Package Explorer y seleccionando "Debug As-> Python Run" y especificando "apler -l info" como argumento. Esto inicia MainThread, Mediator y tres subprocesos más visibles desde el depurador de Eclipse.

Después de que volver a la vista PyDev e iniciar la aplicación principal por clic derecho sobre el proyecto y seleccionando Ejecutar como/PyDev: Django

Mis problemas es que una vez que la tarea es presentada por el mytask.delay() no se detiene en el punto de interrupción. Puse algunos rastros con el código de tareas para que pueda ver que se ejecutó en uno de los hilos de trabajo.

Por lo tanto, cómo hacer que el depurador de Eclipse para detenerse en el punto de interrupción se coloca en el canto de tareas cuando se ejecuta en el apio trabajadores hilo?

Respuesta

28

Debe tener en cuenta la opción de ejecutar la tarea de apio en el mismo hilo como el proceso principal (normalmente se ejecuta en un proceso independiente), esto hará que la depuración mucho más fácil.

Se puede decir que el apio para ejecutar la tarea de sincronización mediante la adición de esta configuración a su módulo settings.py:

CELERY_ALWAYS_EAGER = True 

Nota: esto sólo está destinado a ser utilizado durante las etapas de depuración o de desarrollo!

+0

Gracias, esto resuelve parcialmente el problema. Pero, ¿qué sucede si necesito depurar las tareas cuando se ejecutan en paralelo en diferentes subprocesos? – spoonboy

+3

¿qué hay de pdb? mira aquí http://docs.celeryproject.org/en/latest/tutorials/debugging.html –

+0

Verás, realmente no necesito depurarlo remotamente. Solo quiero depurar localmente en Eclipse en el hilo diferente. – spoonboy

-1

Si solo se ejecuta en un subproceso diferente, debería funcionar en las últimas versiones de PyDev (creo que antes había un problema donde un subproceso generado no se depuraría, pero esto se solucionó).

Ahora, si se trata de poner en marcha en un proceso diferente, es necesario utilizar el depurador remoto (incluso si es en la misma máquina). Ver: http://pydev.org/manual_adv_remote_debugger.html

+0

Parece que todavía está exactamente como se describió anteriormente en 2.7.3, desafortunadamente. –

5

CELERYD_POOL se establece de manera predeterminada en celery.concurrency.prefork:TaskPool que genera procesos separados para cada trabajador y PyDev no puede ver dentro de ellos. Si lo cambia a una de las opciones enhebradas, puede usar el depurador.

Por ejemplo, para el apio 3.1 se puede usar esta configuración:

CELERYD_POOL = 'celery.concurrency.threads:TaskPool' 

Tenga en cuenta que esto requiere el módulo threadpool para ser instalado.

También asegúrese de tener CELERY_ALWAYS_EAGER = False, de lo contrario el cambio de la clase de la piscina no tiene sentido.

+0

wow esto parece bastante increíble! –

0

puedo crear un comando de gestión de tarea de prueba .. le resulte más fácil de hacerlo en forma de concha ..

10

Puede hacerlo utilizando de apio rdb:

from celery.contrib import rdb 
rdb.set_trace() 

Luego, en un tipo de terminal diferente telnet localhost 6900, y obtendrá el aviso de depuración.

+2

o puerto 6901 - siga el mensaje en el término de apio –

Cuestiones relacionadas