DJango配置Celery异步任务


安装相应的模块

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值