버전: | 2.7.0 |
---|---|
편물: | http://django-celery-beat.readthedocs.io/ |
다운로드: | http://pypi.python.org/pypi/django-celery-beat |
원천: | http://github.com/celery/django-celery-beat |
키워드: | django, 셀러리, 비트, 주기적 작업, cron, 스케줄링 |
이 확장을 사용하면 정기적인 작업 일정을 데이터베이스에 저장할 수 있습니다.
정기적인 작업은 Django 관리 인터페이스에서 관리할 수 있으며, 여기에서 정기적인 작업과 실행 빈도를 생성, 편집, 삭제할 수 있습니다.
이 확장에 대한 사용 및 설치 지침은 Celery 설명서에서 확인할 수 있습니다.
경고
Django TIME_ZONE
설정을 변경하면 주기적인 작업 일정은 여전히 이전 시간대를 기반으로 합니다.
이 문제를 해결하려면 각 주기적 작업에 대한 "마지막 실행 시간"을 재설정해야 합니다.
>> > from django_celery_beat . models import PeriodicTask , PeriodicTasks
>> > PeriodicTask . objects . all (). update ( last_run_at = None )
>> > PeriodicTasks . update_changed ()
메모
이렇게 하면 주기적인 작업이 이전에 실행된 적이 없는 것처럼 상태가 재설정됩니다.
django_celery_beat.models.PeriodicTask
이 모델은 실행할 단일 주기적 작업을 정의합니다.
작업 실행 빈도를 정의하는 일정과 연결되어야 합니다.
django_celery_beat.models.IntervalSchedule
특정 간격(예: 5초마다)으로 실행되는 일정입니다.
django_celery_beat.models.CrontabSchedule
cron: minute hour day-of-week day_of_month month_of_year
항목과 같은 필드가 있는 일정.
django_celery_beat.models.PeriodicTasks
이 모델은 일정이 변경된 시점을 추적하기 위한 지표로만 사용됩니다.
PeriodicTask
를 업데이트할 때마다 이 테이블의 카운터도 증가하며, 이는 celery beat
서비스에 데이터베이스에서 일정을 다시 로드하도록 지시합니다.
정기적인 작업을 대량으로 업데이트하는 경우 카운터를 수동으로 업데이트해야 합니다.
>> > from django_celery_beat . models import PeriodicTasks
>> > PeriodicTasks . update_changed ()
일정한 간격으로 실행되는 주기적 작업을 만들려면 먼저 간격 개체를 만들어야 합니다.
>> > from django_celery_beat . models import PeriodicTask , IntervalSchedule
# executes every 10 seconds.
>> > schedule , created = IntervalSchedule . objects . get_or_create (
... every = 10 ,
... period = IntervalSchedule . SECONDS ,
... )
필요한 모든 필드는 기간 유형과 빈도입니다.
특정 기간 세트 중에서 선택할 수 있습니다.
IntervalSchedule.DAYS
IntervalSchedule.HOURS
IntervalSchedule.MINUTES
IntervalSchedule.SECONDS
IntervalSchedule.MICROSECONDS
메모
10초마다 실행되는 여러 주기적 작업이 있는 경우 모두 동일한 일정 개체를 가리켜야 합니다.
사용자에게 이를 제공해야 하는 경우 사용할 수 있는 "선택 튜플"도 있습니다.
>> > IntervalSchedule . PERIOD_CHOICES
이제 일정 개체를 정의했으므로 정기적인 작업 항목을 만들 수 있습니다.
>> > PeriodicTask . objects . create (
... interval = schedule , # we created this above.
... name = 'Importing contacts' , # simply describes this periodic task.
... task = 'proj.tasks.import_contacts' , # name of task.
... )
이는 매우 기본적인 예이며, 작업을 실행하는 데 사용되는 인수 및 키워드 인수, 작업을 보낼 queue
[*]을 지정하고 만료 시간을 설정할 수도 있습니다.
다음은 인수를 지정하는 예입니다. JSON 직렬화가 필요한 방식에 유의하세요.
>> > import json
>> > from datetime import datetime , timedelta
>> > PeriodicTask . objects . create (
... interval = schedule , # we created this above.
... name = 'Importing contacts' , # simply describes this periodic task.
... task = 'proj.tasks.import_contacts' , # name of task.
... args = json . dumps ([ 'arg1' , 'arg2' ]),
... kwargs = json . dumps ({
... 'be_careful' : True ,
... }),
... expires = datetime . utcnow () + timedelta ( seconds = 30 )
... )
[*] | exchange 및 routing_key 필드를 사용하여 하위 수준 AMQP 라우팅을 사용할 수도 있습니다. |
crontab 일정에는 minute
, hour
, day_of_week
, day_of_month
및 month_of_year
필드가 있으므로 30 * * * *
(매 시간 30분 후에 실행)에 해당하는 crontab 항목을 지정하려면 다음을 지정하세요.
>> > from django_celery_beat . models import CrontabSchedule , PeriodicTask
>> > schedule , _ = CrontabSchedule . objects . get_or_create (
... minute = '30' ,
... hour = '*' ,
... day_of_week = '*' ,
... day_of_month = '*' ,
... month_of_year = '*' ,
... timezone = zoneinfo . ZoneInfo ( 'Canada/Pacific' )
... )
crontab 일정은 'timezone' 입력 매개변수를 사용하여 특정 시간대에 연결됩니다.
그런 다음 이 일정을 사용하여 정기 작업을 만들려면 이 문서 앞부분의 간격 기반 정기 작업과 동일한 접근 방식을 사용하되, interval=schedule
대신 crontab=schedule
지정합니다.
>> > PeriodicTask . objects . create (
... crontab = schedule ,
... name = 'Importing contacts' ,
... task = 'proj.tasks.import_contacts' ,
... )
enabled
플래그를 사용하여 주기적 작업을 일시적으로 비활성화할 수 있습니다.
>> > periodic_task . enabled = False
>> > periodic_task . save ()
주기적 작업을 실행하려면 여전히 '작업자'가 필요합니다. 따라서 기본 Celery 패키지가 설치되어 있는지 확인하십시오. (설치되어 있지 않은 경우 여기 설치 지침을 따르십시오: https://github.com/celery/celery)
작업자와 비트 서비스가 동시에 실행되어야 합니다.
Celery 작업자 서비스를 시작합니다(Django 프로젝트 이름 지정).
$ celery -A [프로젝트 이름] 작업자 --loglevel=info
별도의 프로세스로 비트 서비스를 시작합니다(Django 스케줄러 지정).
$ celery -A [프로젝트 이름] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
또는 -S(스케줄러 플래그)를 사용할 수 있습니다. 더 많은 옵션을 보려면 celery beat --help
참조하세요.
$ celery -A [프로젝트 이름] beat -l info -S django
또한 대안으로 단 하나의 명령으로 위의 두 단계(작업자 및 비트 서비스)를 실행할 수 있습니다( 개발 환경에만 권장).
$ celery -A [프로젝트 이름] 작업자 --beat --scheduler django --loglevel=info
이제 Django 관리 인터페이스에서 정기적인 작업을 추가하고 관리할 수 있습니다.
Python Package Index(PyPI)를 통해 또는 소스에서 django-celery-beat를 설치할 수 있습니다.
pip
사용하여 설치하려면 다음을 수행하세요.
$ pip install --upgrade django-celery-beat
http://pypi.python.org/pypi/django-celery-beat에서 최신 버전의 django-celery-beat를 다운로드하세요.
다음을 수행하여 설치할 수 있습니다.
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade build pip
$ tar xvfz django-celery-beat-0.0.0.tar.gz
$ cd django-celery-beat-0.0.0
$ python -m build
$ pip install --upgrade .
설치 후 django_celery_beat
Django의 설정 모듈에 추가하세요.
INSTALLED_APPS = [
...,
'django_celery_beat' ,
]
다음을 사용하여 django_celery_beat
마이그레이션을 실행합니다.
$ python manage.py migrate django_celery_beat
다음 pip 명령을 사용하여 django-celery-beat의 최신 기본 버전을 설치할 수 있습니다.
$ pip install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
http://127.0.0.1:58000/admin/에서 Django 관리자를 사용하여 django-celery-beat의 로컬 개발 복사본을 실행하려면 다음을 실행하세요.
$ docker-compose up --build
비밀번호 admin
사용하여 사용자 admin
으로 로그인합니다.
표준 시간대에 해당하는 프로젝트가 있는 경우 설정 파일에서 DJANGO_CELERY_BEAT_TZ_AWARE=False
설정할 수 있습니다.
django-celery-beat 및 수천 개의 기타 패키지 관리자는 Tidelift와 협력하여 애플리케이션 구축에 사용하는 오픈 소스 종속성에 대한 상업적 지원 및 유지 관리를 제공하고 있습니다. 시간을 절약하고 위험을 줄이며 코드 상태를 개선하는 동시에 사용하는 정확한 종속성에 대한 비용을 관리자에게 지불합니다. 자세히 알아보세요.