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.