Django celery
celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SchoolMS.settings')
app = Celery('SchoolMS')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
init.py
from __future__ import absolute_import
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
setting.py
# 定时任务
broker_url = 'amqp://guest:guest@localhost:5672//'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERYBEAT_SCHEDULE = {
'check_sms_remain_everyday': {
'task': 'family.tasks.notify_if_sms_out',
'schedule': crontab(minute=0, hour=10),
'args': (),
},
'sms_reset': {
'task': 'family.tasks.reset_sms_count',
'schedule': crontab(minute=43, hour=17),
'args': (),
},
}
task.py
from celery import shared_task, task
@task
def reset_sms_count():
sms_reset_date = get_value(settings.SMS_RESET_DATE_NAME)
if sms_reset_date == datetime.now().day:
for sms_assign in SMSAssign.objects.all():
sms_assign.period_reset()
Logger.objects.create(user=None, category=5, content='系统重置短信分配')
命令:
python manage.py celery beat -l info # 启动任务发送端
python manage.py celery worker -l info # 启动任务处理端 worker
重启worker才能使task装饰过的代码在修改过后改成修改之后的版本,不然一直运行的是修改前的版本,类似于apache。
在setting.py 中修改CELERYBEAT_SCHEDULE要求重启beat和worker才能即时生效
安装、使用RabbitMQ:
windows需要下载安装软件,Linux直接apt-get
http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#broker-rabbitmq
生产环境部署参见 Supervisor使用笔记及celery生产部署
windows定时关机 cmd输入:
要取消ID为1的关机计划: