Django 관리자에서 셀러리 비트를 사용하고 일정을 관리하는 데이터베이스 스케줄러
Must read previous post first before reading this one :D
이 게시물의 목표
예) 매주 금요일 오전 4시에 사용자에게 알림 메일 발송
셀러리 비트는 무엇입니까?
셀러리 비트는 스케줄러입니다. 작업을 실행할 시간이 되면 작업자 노드에 항목을 전달합니다. (정기 태스크 실행)
셀러리 비트 설치
pip install django-celery-beat
마이그레이션 - 작업 및 일정을 저장하기 위해 테이블이 생성됩니다.
python manage.py migrate
settings.py
INSTALLED_APPS = (
...,
'django_celery_beat',
)
이메일 설정
1 . 클릭
Manage your Google Account
2 . 보안 > 2단계 인증에서
2 step verification
가 켜져 있는지 확인하세요.삼 . 생성
app password
. 앱 비밀번호 > 앱 선택 > 기타 > 이름을 무엇이든 지정하세요!4 . 추가
settings.py
# e-mail settings
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = {YOUR EMAIL ADDRESS}
EMAIL_HOST_PASSWORD = {YOUR PASSWORD FROM NO.3}
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
이메일 설정 완료!
셀러리가 매장 작업 및 일정을 능가하는 곳은 어디입니까?
1. 기본 항목은 beat_schedule 설정에서 가져옵니다.
task.py
app.conf.beat_schedule = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': 30.0,
'args': (16, 16)
},
}
app.conf.timezone = 'UTC'
또는 일정을 더 많이 제어하려면
crontab
를 사용하십시오.from celery.schedules import crontab
app.conf.beat_schedule = {
# Executes every Monday morning at 7:30 a.m.
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
셀러리 비트 서비스 시작
celery -A <project name> beat
2 . 사용자 지정 저장소 사용 - 데이터베이스에 저장하겠습니다.
@app.task(name="send_notification", bind=True, default_retry_delay=300, max_retries=5)
def send_notification(self, subject, message):
from django.core.mail import send_mail as sm
# Fetch all users except superuser
users = User.objects.exclude(is_superuser=True).all()
user_emails = [user.email for user in users]
# try sending email
try:
res = sm(
subject=subject,
html_message=message,
from_email=EMAIL_HOST_USER,
recipient_list=user_emails,
fail_silently=False,
message=None)
print(f'Email send to {len(user_emails)} users')
except Exception:
# retry when fail
send_notification.retry()
그래서 여기에
send_notification
라는 작업을 만들었습니다.default_retry_delay
: 실패 시 300초 후에 다시 시도max_retries
: 5번만 더 재시도한 다음 중지합니다.여기서 나는 또한
subject
와 message
를 인수로 받고 있습니다. 이것은 django admin에서 subject
및 message
를 전달할 수 있음을 의미합니다. 이것은 나중에 보여드리겠습니다.localhost:8080/admin
.새
Periodic Tasks
메뉴가 표시됩니다.crontab
Crontab 만들기 > crontab 추가crontab을 만들어 보겠습니다. 여기에서 하나를 만들었습니다.
Every Saturday @ 10:47 p.m.
crontab에 대해 잘 모르는 경우 이 항목을 확인하십시오Crontab examples.주기적인 작업을 만들어 봅시다
Periodic tasks
> Add
를 클릭합니다. 원하는 새 이름을 만듭니다. 거기에 생성한 작업 찾기send_notification
Schedule
> Crontab Schedule
> 방금 생성한 crontab
를 찾습니다.추가
Start Datetime
여기에서
subject
및 message
인수를 전달합니다.이제 모든 준비가 완료되었습니다.
django 서버 시작, rabbitmq 시작
셀러리 시작
celery -A djangocelery(app name) worker --loglevel=info
다른 터미널에서 셀러리 비트 시작
celery -A djangocelery(app name) beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
셀러리비트의 종점을 확인해보자
@오후 10시 47분 셀러리 비트 스케줄러가 우리가 만든 작업
send_notification
을 보내고 있습니다!! 셀러리까지!!셀러리 터미널을 확인하십시오. Celery가 작업을 수신하고 이메일을 보냈습니다.
그리고 오후 10시 47분에 이메일을 받았습니다. django admin에서 설정한 제목과 내용으로 토요일에!
결론
따라서
celery beat
는 scheduler
이고 celery
는 task
를 실행하는 것입니다. Database scheduler
는 작업 및 일정이 데이터베이스에 저장되어 django admin
에서 관리할 수 있는 셀러리 비트 방법 중 하나입니다.장고 셀러리 비트는 여기까지입니다!
끝.
Reference
이 문제에 관하여(Django 관리자에서 셀러리 비트를 사용하고 일정을 관리하는 데이터베이스 스케줄러), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/daeenchoi/database-scheduler-with-celery-beat-and-manage-schedule-in-django-admin-il5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)