栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

DJango配置Celery异步任务

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号