Niestety nie działa --autoreload
i jest to deprecated.
Można użyć funkcji nadzoru, która zapewnia watchmedo funkcję powłoki w celu wykonywania działań na podstawie zdarzeń plików.
pip install watchdog
można rozpocząć pracownikowi
watchmedo auto-restart -- celery worker -l info -A foo
Domyślnie będzie oglądać do wszystkich plików w bieżącym katalogu. Można je zmienić, przekazując odpowiednie parametry.
watchmedo auto-restart -d . -p '*.py' -- celery worker -l info -A foo
Jeśli używasz django i nie chcesz polegać na systemie nadzoru, istnieje prosta sztuczka, aby to osiągnąć. Django ma narzędzie autoreload, które jest używane przez runserver do restartowania serwera WSGI po zmianie kodu.
Ta sama funkcja może zostać wykorzystana do przeładowania pracowników selera. Utwórz oddzielne polecenie zarządzania zwane selerem. Napisz funkcję, która zabije istniejącego pracownika i uruchom nowego pracownika. Teraz zaczep tę funkcję, aby automatycznie ładować w następujący sposób.
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)
Teraz można uruchomić pracownika seler python manage.py celery
które autoreload gdy zmiany kodzie.
Jest to wyłącznie w celach programistycznych i nie należy go używać w produkcji.