1.创建一个django项目bookcity
2在项目bookcity的目录bookcity里
settings.py
import djcelery
....
INSTALLED_APPS = [
...
'djcelery', # 添加djcelery
...
]
"""celery异步定时调用"""
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/2' # 生产者
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 默认的数据库调度模型,任务执行周期都被存在默认指定的orm数据库中
BROKER_TRANSPORT = 'redis'
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
# CELERYD_MAX_TASKS_PER_CHILD = 40 # 每个worker执行了多少任务就会死掉,我建议数量可以大一些,
然后在该目录里创建 celery.py
from __future__ import absolute_import, unicode_literals
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', 'BookCity.settings')
broker = 'redis://127.0.0.1:6379/2' # Broker配置,使用Redis作为消息中间件
backend = 'redis://127.0.0.1:6379/3' # 存储结果
# hermes主应用名
app = Celery('BookCity', broker=broker, backend=backend)
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))
from datetime import timedelta
# 定时任务
app.conf.update(
CELERYBEAT_SCHEDULE={
'add-every-30-seconds': {
'task': 'parent.tasks.count_words', # 任务名(parent某个应用, tasks某个应用下的tasks.py, count_words任务名)
'schedule': timedelta(seconds=60*60), # 每3600秒执行一次该任务
},
}
)
"""
celery -B -A smy0722 worker -l info # 调试命令 同时启动work 和 beat
在终端manage同级目录下输入如下语句,可在后台运行
celery multi start w1 -A project -l info # 本项目进程 w1-->项目进程名(自己随意取)project是你的工程目录
celery multi start w1 -B -A project -l info # 后台同时启动work和beat
w1为你为进程起的名字,需记住,以方便重启和结束进程
关闭和重启celery
celery multi stop w1 # 结束w1进程
celery multi restart w1 -A project -l info # 重启worker进程
celery multi start w1 -B -A project -l info # 后台同时启动work和beat
celery status -A project # 查看该项目运行的进程数
"""
然后在该目录的init.py中
from __future__ import absolute_import
from .celery import app as celery_app
__all__ = ['celery_app']
celery的基本配置就此完成
然后自己在每个应用下创建自己的tasks.py,写下异步调用和定时处理的方法