Celery кеширует задачи? Как я могу перезагрузить изменения в среде разработчика? - PullRequest
0 голосов
/ 18 апреля 2020

При использовании Celery, Docker, RabbitMQ и Django (с django-celery-results и django-celery-beat) я могу загрузить простую задачу, следуя инструкции .

Однако при внесении изменений в задачу и перезагрузке сервера (docker-compose down, docker-compose up) изменения не отражаются. Кеширует ли Celery задачи где-нибудь / как мне их перезагружать в среде разработчиков? Учебник устанавливает CELERY_CACHE_BACKEND = 'django-cache', но я бы предположил, что это уничтожено docker-compose down?

Например, удаление задачи из обоих tasks.py и CELERY_BEAT_SCHEDULE в settings.py не предотвращает это загрузка при перезапуске сервера.

celery.py:

from __future__ import absolute_import, unicode_literals

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

proj / __ init __ .py:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)

tasks.py:

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def hello_world():
   return print('hello world!')

settings.py:

CELERY_BROKER_URL = 'pyamqp://rabbitmq:5672'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_BEAT_SCHEDULE = {
    'hello':
        {
            'task': 'proj.tasks.hello_world',
            'schedule':
                crontab()  # execute every minute
        }
}

1 Ответ

1 голос
/ 18 апреля 2020

В сельдерее нет функции автозагрузки (она была удалена для версии 4 и была экспериментальной)

Функция --autoreload была удалена.

Это был экспериментальный особенность, и не покрывается нашей гарантией срока устаревания. Флаг полностью убирается, поэтому рабочий при входе в систему при взломе будет sh. К счастью, этот флаг не используется в производственных системах.

Вы можете написать собственное решение для отслеживания изменений файлов с помощью сторожевого таймера или чего-то еще для перезапуска работника или просто перезапустить контейнер / перезапустить работника

...