2011-03-01 3 views
7

Recientemente he estado jugando con django y apio. Una cosa molesta durante el desarrollo es el hecho de que tengo que reiniciar el daemon de apio cada vez que modifico una tarea. Cuando estoy desarrollando, usualmente me gusta usar 'manage.py runserver', que automáticamente recarga el marco django en las modificaciones de mis aplicaciones.¿La opción runjanver de django proporciona un gancho para ejecutar otros scripts de reinicio?

¿Hay alguna manera de agregar un gancho al proceso de recarga que hace runserver para que se reinicie automáticamente el daemon de apio que tengo en ejecución?

Como alternativa, ¿el apio tiene un modo similar de monitor y recarga en el cambio que debería usar para el desarrollo?

Respuesta

4

Django-supervisor funciona muy bien para este propósito. Puede hacer que inicie el servidor Django, Celery y cualquier otra cosa que necesite, y tiene diferentes configuraciones para los servidores de desarrollo y producción. También sabe volver a cargar el daemon de apio cuando cambie tu código. https://github.com/rfk/django-supervisor

1

Apio no tenía ninguna función para el código de recarga o para el reinicio automático cuando el código cambia, que tiene que reiniciarlo manualmente.

No hay forma de agregar un gancho, y creo que no vale la pena editar el código fuente de django solo para realizar un reinicio. Personalmente, mientras estoy desarrollando prefiero ver que la capa de salida del apio que está decorado con color en lugar de cola los registros, es más legible.

3

Creo que puede establecer CELERY_ALWAYS_EAGER en true.

1

Celery 2.5 tiene una opción de tiempo de ejecución experimental --autoreload que también se puede usar para este propósito. Aquí hay más detalles en el release notes. Dicho eso, creo que django-supervisor (a través de @Lee Semel) parece ser la mejor forma de hacer las cosas. Pensé que publicaría esta alternativa aquí en caso de que otros lectores no quieran tener que configurar otra aplicación para el procesamiento asincrónico.

1

Sí. Django proporciona un gancho de recarga automática, que se puede usar para reiniciar otras secuencias de comandos.

Aquí es un simple comando de gestión que imprime un mensaje de recarga

import subprocess 

from django.core.management.base import BaseCommand 
from django.utils import autoreload 


def reload(): 
    print('Code changed. Auto reloading...')  

class Command(BaseCommand): 

    def handle(self, *args, **options): 
     autoreload.main(reload) 

Ahora se puede guardar en un reload.py y ejecutarlo con python manage.py reload. Un comando de administración al reload celery workers is available here.

Cuestiones relacionadas