django+xadmin+djcelery 배경 관리 정시 작업 실현
1.설치
redis==2.10.6
celery==3.1.23
django-celery==3.1.17
flower==0.9.2
supervisor==3.3.4
flower 는 정시 작업,슈퍼 바 이 저 관리 프로 세 스 를 모니터링 하 는 데 사 용 됩 니 다.선택 할 수 있 습 니 다.
2.설정
settings.py 에 다음 줄 을 추가 합 니 다:
#
from __future__ import absolute_import
# celery settings
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://localhost:6379'
# BROKER_URL = 'redis://: @ : / '
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' #
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERYD_MAX_TASKS_PER_CHILD = 40
CELERY_TIMEZONE = 'Asia/Shanghai'
INSTALLED_APPS = [
'djcelery',# djcelery
]
3.정시 퀘 스 트 를 등록 하 는 몇 가지 표
from __future__ import absolute_import, unicode_literals
from djcelery.models import (
TaskState, WorkerState,
PeriodicTask, IntervalSchedule, CrontabSchedule,
)
from xadmin.sites import site
site.register(IntervalSchedule) #
site.register(CrontabSchedule) #
site.register(PeriodicTask) #
site.register(TaskState) #
site.register(WorkerState) # worker
4.메 인 애플 리 케 이 션 에 celery.py 추가__init__.py 수정 은 다음 과 같 습 니 다.
# __init__.py
from __future__ import absolute_import
from .celery import app as celery_app
# celery.py
from __future__ import absolute_import
import os
from celery import Celery, platforms
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hermes.settings')
# hermes
app = Celery('hermes')
platforms.C_FORCE_ROOT = True
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
5.퀘 스 트 추가 에 tasks.py 추가
from __future__ import absolute_import
from celery import task
import time
from .channels import Cache_data_to_redis
# sms_organizationcount
@task
def readAndWrite(begin,end):
begin = str(begin)[:4] + '-' + str(begin)[4:6] + '-' + str(begin)[6:8]
end = str(end)[:4] + '-' + str(end)[4:6] + '-' + str(end)[6:8]
i = 0
begin_time = time.time()
read = Cache_data_to_redis().connection
Rcursor = read.cursor()
query = "SELECT id from sms_organizationcount WHERE alia_date_time between '"
query += begin
query += "' and '"
query += end
query += "'"
readSql = "SELECT alia_month_time, alia_date_time, count(*) as total_nums, count(t.`status`=2 or null) as error_nums, name FROM \
(select *, DATE_FORMAT(req_time,'%Y-%m') as alia_month_time, DATE_FORMAT(req_time,'%Y-%m-%d') as alia_date_time, \
LEFT(body,LOCATE('】',body)) as name from sms_smslog where LOCATE('】',body) >0 \
and LEFT(body,1)='【' and DATE_FORMAT(req_time,'%Y-%m-%d') between '"
readSql += begin
readSql += "' and '"
readSql += end
readSql += "')"
readSql += " as t GROUP BY alia_date_time , name;"
Rcursor.execute(readSql)
readResult = Rcursor.fetchall()
Rcursor.execute(query)
query_result = Rcursor.fetchall()
deleteSql = "delete from sms_organizationcount where alia_date_time between '%s' and '%s'" % (begin,end)
if query_result:
delete_record = Cache_data_to_redis().connection
Dcursor = delete_record.cursor()
Dcursor.execute(deleteSql)
delete_record.commit()
delete_record.close()
for value in readResult:
write = Cache_data_to_redis().connection
Wcursor = write.cursor()
writeSql = "INSERT into sms_organizationcount (alia_month_time, alia_date_time, total_nums, error_nums, `name`) " \
" VALUES ('%s', '%s', '%s', '%s', '%s' )" %\
(value['alia_month_time'], value['alia_date_time'], value['total_nums'], value['error_nums'], value['name'])
try:
Wcursor.execute(writeSql)
i += 1
write.commit()
except:
write.rollback()
write.close()
read.close()
end_time = time.time()
pass_time = end_time - begin_time
return i, pass_time
6.최종 효 과 는 다음 그림 과 같다.7.터미널 시작 celery 명령:
# task
celery -A hermes inspect registered
#
python manage.py celery -A django_celery_demo worker -B # django_celery_demo celery setting
#celery_beat
#
supervisorctl tail programname stdout
# flower celery
python manage.py celery flower
ip:5555
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.