Подтвердить что ты не робот

В сельдереем 3.1, выполняя периодическую задачу django

В Django многое изменилось, поэтому я не могу использовать 3.1. Мне нужна помощь.

Я читал о сделать задачу в django и читать Периодические задачи. Но я не знаю, как выполнять периодические задания в джанго. Я думаю, что это из-за моего низкого уровня английского языка.

В старой версии Celery я импортировал djcelery & crontab и установил CELERYBEAT_SCHEDULE в settings.py и вычитал manage.py.

Но мне кажется, что я больше не могу исполнять дегустацию сельдерея. Чем я должен положить CELERYBEAT_SCHEDULE? В примере django в документах они устанавливают os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')  в proj/proj/celery.py. (1) Таким образом, установка celerybeat в settings.py(как и раньше) в порядке?

(2) Если можно, крошечный пример выполнения периодической задачи в django очень поможет. Когда я читал учебники, самой запутанной частью был File Path. Если вы не хотите приводить целый пример, я буду очень благодарен, если вы объясните, где я должен делать задания, устанавливать ритм и исполнять deamon.

Спасибо за чтение.

4b9b3361

Ответ 1

Я предполагаю, что вы уже прочитали раздел django из документов, но вы видели этот примерный проект?

Он не использует планировщик, но если вы добавите его в settings.py:

from __future__ import absolute_import

from celery.schedules import crontab


CELERYBEAT_SCHEDULE = {
    # crontab(hour=0, minute=0, day_of_week='saturday')
    'schedule-name': {  # example: 'file-backup' 
        'task': 'some_django_app.tasks....',  # example: 'files.tasks.cleanup' 
        'schedule': crontab(...)
    },
}

# if you want to place the schedule file relative to your project or something:
CELERYBEAT_SCHEDULE_FILENAME = "some/path/and/filename"

Теперь для команд забудьте о manage.py, просто введите celery напрямую:

-B позволяет всегда бить сельдерей.

-A указывает имя приложения celery. Обратите внимание на эту строку в celery.py примера проекта: app = Celery('proj')

celery -A proj worker -B -l info

'django-celery' не требуется, установите его ТОЛЬКО, если вам нужно управлять расписание от администратора или если вы хотите сохранить результаты задачи в БД через django ORM:

INSTALLED_APPS += ('djcelery',)

# store schedule in the DB:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

Ответ 2

Вы можете использовать приложение django-celery: https://pypi.python.org/pypi/django-celery

Установка

pip install django-celery

Чтобы включить django-сельдерей для вашего проекта, вам нужно добавить djcelery в INSTALLED_APPS:

INSTALLED_APPS += ("djcelery", )
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"

затем добавьте следующие строки в свои настройки .py:

import djcelery
djcelery.setup_loader()

ИСПОЛЬЗОВАНИЕ

В linux вы можете запустить рабочего с помощью celery-beat следующим образом:

python manage.py celeryd worker --loglevel=DEBUG  -E -B -c 1
python manage.py help celeryd #to find out the args meaning

Также вы хотите контролировать задачи в django admin. Чтобы включить мониторинг, вам необходимо запустить celerycam:

python /var/www/gorod/manage.py celerycam

Чтобы выполнить периодическую задачу, вы можете использовать celery.decorators.periodic_task.

# myapp/tasks.py
import datetime
import celery

@celery.decorators.periodic_task(run_every=datetime.timedelta(minutes=5))
def myfunc():
    print 'periodic_task'

Или используйте

# settings.py
CELERYBEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (16, 16)
    },
}