2017-05-11 19 views

cevap

9

Ne yazık ki --autoreload çalışmıyor ve deprecated.

Dosya olaylarına dayalı eylemleri gerçekleştirmek için watchmedo'yu bir kabuk özelliği sağlayan Watchdog'u kullanabilirsiniz.

pip install watchdog 

Bunu geçerli dizindeki tüm dosyalar için izleyecekler Varsayılan olarak

watchmedo auto-restart -- celery worker -l info -A foo 

ile işçiyi başlayabilir. Bunlar ilgili parametreleri geçirerek değiştirilebilir.

watchmedo auto-restart -d . -p '*.py' -- celery worker -l info -A foo 

Eğer Django kullanıyor ve bekçi bağımlı istemiyorsanız, bunu başarmak için basit bir hile var. Django, kod değiştiğinde WSGI sunucusunu yeniden başlatmak için runserver tarafından kullanılan autoreload yardımcı programına sahiptir.

Kereviz işçilerini yeniden yüklemek için aynı işlevsellik kullanılabilir. Kereviz denilen ayrı bir yönetim komutu oluşturun. Mevcut çalışanı öldürmek ve yeni bir çalışanı başlatmak için bir işlev yazın. Şimdi bu işlevi otomatik olarak yüklemek için aşağıdaki gibi bağlayın.

import shlex 
import subprocess 

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


def restart_celery(): 
    cmd = 'pkill celery' 
    subprocess.call(shlex.split(cmd)) 
    cmd = 'celery worker -l info -A foo' 
    subprocess.call(shlex.split(cmd)) 


class Command(BaseCommand): 

    def handle(self, *args, **options): 
     print('Starting celery worker with autoreload...') 
     autoreload.main(restart_celery) 

Şimdi zaman kod temeli değişiklikleri Autoreload olacak python manage.py celery ile kereviz işçi çalıştırabilir.

Bu yalnızca geliştirme amaçlıdır ve üretimde kullanmayın.

1

Sen ebeveyn işçisi sürecine SIGHUP deneyebilirsiniz, bu işçinin yeniden ama yeni görevler alıp almadığından emin değilim. Bir atışa değer, düşünün :)