安装相应的模块
pip install django==3.2
pip install celery==5.0.5
pip install redis==3.5.3
# Windows下运行Celery4以后的版本,需要安装eventlet库
pip install eventlet
# 需要设置定时或者周期任务时安装
pip install django-celery-beat==2.2.0
# 需要存储任务结果时安装,视情况需要
pip install django-celery-results==2.0.1
# 视情况需要,需要监控celery运行任务状态时安装
flower==0.9.7
Celery配置
新增celery.py文件,该文件建立在与settings.py同级的目录下,文件内容如下
import os
from celery import Celery
# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名称.settings')
# 实例化,需要改成自己的APP名称
app = Celery('app01')
# namespace='CELERY'作用是允许你在Django配置文件中对Celery进行配置
# 但所有Celery配置项必须以CELERY开头,防止冲突
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动从Django的已注册app中发现任务
app.autodiscover_tasks()
修改与settings.py文件同级的__init__.py文件,内容如下:
import pymysql
from celery import app as celery_app
pymysql.install_as_MySQLdb()
__all__ = ['celery_app']
在settings.py文件中添加配置信息
参考我的配置
# Broker配置,使用Redis作为消息中间件
CELERY_BROKER_URL = 'redis://:Admin911$@49.234.59.42:6379/0'
# BACKEND配置,这里使用redis
CELERY_RESULT_BACKEND = 'redis://:Admin911$@49.234.59.42:6379/0'
# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'
# 并发任务数worker数量
CELERYD_CONCURRENCY = 2
# 每个worker最大执行任务数
CELERYD_MAX_TASKS_PER_CHILD = 5
详细的配置
#############################################################
# # # # # # # # # # # # CELERY配置 # # # # # # # # # # #
#############################################################
# 时区
CELERY_TIMEZONE = "Asia/Shanghai"
# 限制celery任务执行时间,# 单个任务的运行时间限制,否则会被杀死
CELERY_TASK_TIME_LIMIT = 60*30
# 'redis://localhost:6379/0'.
CELERY_BROKER_URL = f'redis://:{REDIS_CONFIG["PASSWORD"]}@{REDIS_CONFIG["HOST"]}:{REDIS_CONFIG["PORT"]}/12'
CELERY_RESULT_BACKEND = f'redis://:{REDIS_CONFIG["PASSWORD"]}@{REDIS_CONFIG["HOST"]}:{REDIS_CONFIG["PORT"]}/13'
CELERY_TASK_TIME_LIMIT = 60 * 60
# 每个worker最多执行{num}数量任务
CELERY_MAX_TASKS_PER_CHILD = 200
# 指定接受任务的格式
CELERY_ACCEPT_CONTENT = ['json',]
# 任务序列化
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
# platforms.C_FORCE_ROOT = True
CELERY_BEAT_SCHEDULE = {
"every_24_hour_record": {
"task": "companyInfo.tasks.create_record", # 定时任务程序
"schedule": crontab(hour=0,minute=11), # 每天0:11点执行
# "schedule":timedelta(seconds=20), #每20秒
"args": (), # 定时任务所需参数
},
"send_email_last_report": {
"task": "companyInfo.tasks.send_email_last_report", # 定时任务程序
"schedule": crontab(hour=0,minute=1), # 每天0:01点执行
#"schedule":timedelta(seconds=20), #每20秒
"args": (), # 定时任务所需参数
},
# "send_email_today_report": {
# "task": "companyInfo.tasks.send_email_today_report", # 定时任务程序
# "schedule": crontab(hour=0,minute=1), # 每天0点执行
# # "schedule":timedelta(seconds=20), #每20秒
# "args": (), # 定时任务所需参数
# },
}
# 关闭限速
# CELERY_DISABLE_RATE_LIMITS = True
# 默认cpu数量 进程并发,不推荐使用
# CELERYD_CONCURRENCY = 4
在APP下建立tasks.py文件
from celery import shared_task
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
触发任务
from django.http import JsonResponse
from app01 import tasks
# Create your views here.
def index(request,*args,**kwargs):
res=tasks.add.delay(1,3)
#任务逻辑
return JsonResponse({'status':'successful','task_id':res.task_id})
启动Celery
请注意:请用终端进入与manage.py文件夹下启动Celery!!!
Celery -A 项目名称 worker -l info -P eventlet