在django中当我们想要执行某一个定时任务来定时刷新一些后台结果(redis、实时更新数据)等等, 应该怎么办呢?
首先我们需要安装celery
和djang_celery
pip install celery
pip install django-celery
环境
Python 3.6.6
Django 2.0
Celery 3.1.26.post2 (Cipater)
然后我们需要有一个broker来接收和发送队列消息我用的是redis
settings.py
import djcelery
djcelery.setup_loader()
INSTALLED_APPS = [
...
'djcelery'
]
# celery settings
# celery中间人 redis://redis服务所在的ip地址:端口/数据库号
BROKER_URL = 'redis://:199199@localhost:6379/0'
# celery结果返回,可用于跟踪结果
CELERY_RESULT_BACKEND = 'redis://:199199@localhost:6379/0'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
# celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE
在blog/blog/新建一个文件
celery.py`
import os
from celery import Celery
from django.conf import settings
from celery import shared_task
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MediaApp.settings')
# Celery的参数是你当前项目的名称
app = Celery('MediaApp')
# 这一步让你可以在django的settings.py中配置celery
app.config_from_object('django.conf:settings')
# celery会自动在你注册的app中寻找tasks.py,所以你的tasks.py必须放在各个app的目录下并且不能随意命名
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@shared_task
def test():
print('------')
blog/init.py
from .celery import app as celery_app
__all__ = ('celery_app', )
# 这一步会确保当Django项目运行时这个app总是被导入
网友评论