首页 > 其他分享 >celery官方解决方案(基于django新)

celery官方解决方案(基于django新)

时间:2024-05-29 18:22:20浏览次数:9  
标签:CELERY 解决方案 py redis django celery api luffy

celery官方使用方法.jpg
使用官方方案之前,先看看目录结构。

luffy_api/
    __init__.py
    celery.py
    settings.py
    urls.py
    wsgi.py
    myapp/
        __init__.py
        tasks.py
# 也就是放在项目名称同名的内部文件夹下(和settings)同名
# 必须是这样的结构。

第一步 安装必要的模块

# 1 安装必要的模块
pip install Django
pip install celery
pip install redis
pip install eventlet  #在windows环境下需要安装eventlet包

第二步 设置中配置

# 常规的配置
# 如果redis安装在本机,使用localhost或127.0.0.1
# 如果docker部署的redis,使用redis://redis:6379
CELERY_BROKER_URL = "redis://127.0.0.1:6379/1"
CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/2'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TASK_SERIALIZER='json'
CELERY_RESULT_SERIALIZER='json'
CELERY_TASK_RESULT_EXPIRES=60 * 60 * 24

# celery时区设置,建议与Django settings中TIME_ZONE同样时区,防止时差
# Django设置时区需同时设置USE_TZ=True和TIME_ZONE = 'Asia/Shanghai'
CELERY_TIMEZONE = TIME_ZONE
# 2  在配置文件settings.py
# 选择需要的配置就行

CELERY_BROKER_URL = "redis://127.0.0.1:6379/1"
CELERY_RESULT_BACKEND  = "redis://127.0.0.1:6379/2"
# celery 的启动工作数量设置
CELERY_WORKER_CONCURRENCY = 5
# 任务预取功能,就是每个工作的进程/线程在获取任务的时候,会尽量多拿 N 个,以保证获取的通讯成本可以压缩。
CELERY_WORKER_PREFETCH_MULTIPLIER = 5
# CELERY 的 WORKER 执行多少个任务后进行重启操作
CELERY_WORKER_MAX_TASKS_PER_CHILD = 100
# 禁用所有速度限制,如果网络资源有限,不建议开足马力。
CELERY_WORKER_DISABLE_RATE_LIMITS = True
# 指定任务接受的序列化类型
CELERY_ACCEPT_CONTENT = ['json']
# 指定任务序列化方式
CELERY_TASK_SERIALIZER = 'json'
# 指定结果序列化的方式
CELERY_RESULT_SERIALIZER = 'json'
# celery时区设置,建议与Django settings中TIME_ZONE同样时区,防止时差
# Django设置时区需同时设置USE_TZ=True和TIME_ZONE = 'Asia/Shanghai'
CELERY_TIMEZONE = "Asia/Shanghai"
# 为任务设置超时时间,单位秒。超时即中止,执行下个任务。
CELERY_TASK_TIME_LIMIT = 5
# 为存储结果设置过期日期,默认1天过期。如果beat开启,Celery每天会自动清除。
# 设为0,存储结果永不过期
CELERY_RESULT_EXPIRES = 0
# 任务限流
# CELERY_TASK_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}}
# Worker并发数量,一般默认CPU核数,可以不设置
# CELERY_WORKER_CONCURRENCY = 2
# 每个worker执行了多少任务就会死掉,默认是无限的
# CELERY_WORKER_MAX_TASKS_PER_CHILD = 200
# 是否启用UTC时间
CELERY_ENABLE_UTC = False
# 设置CELERY BEAT(任务调度器)检查任务的频率。在这里,CELERY_BEAT_SYNC_EVERY = 1 表示CELERY BEAT 每秒钟检查一次任务
CELERY_BEAT_SYNC_EVERY = 1
# SETTINGS USE_TZ=FALSE时添加该选项,否启动 DJANGO CELERY BEAT 的时候,出现这个错误TYPEERROR: CAN'T COMPARE OFFSET-NAIVE AND OFFSET-AWARE DATETIMES
CELERY_DJANGO_CELERY_BEAT_TZ_AWARE = False
# 休眠最大秒数
CELERY_BEAT_MAX_LOOP_INTERVAL = 300
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

第三步 写入逻辑代码

# luffy_api/luffy_api/celery.py

from celery import Celery
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffy_api.settings.dev")
import django
django.setup()
from django.conf import settings


app = Celery("luffy_api") # 这个luffy_api 即 celery -A 后面的名称
# namespace='CELERY'作用是允许你在Django配置文件中对Celery进行配置
# 但所有Celery配置项必须以CELERY开头,防止冲突
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动从Django的已注册app中发现任务
app.autodiscover_tasks()


# luffy_api/luffy_api/__init__.py
from .celery import app as celery_app


__all__ = ('celery_app',)

第四步 创建任务

注意,这个名称必须叫做tasks.py

# app下面的tasks.py
from celery import shared_task

@shared_task
def add(x, y):
    return x + y

第五步

启动worker,如果有定时任务启动beat

# 在项目根目录下运行
celery -A luffy_api worker -l info -P eventlet # windows

# 启动beat 如果有
celery -A luffy_api beat -l info

第六步

通过视图去执行代码

from .tasks import add

class CeleryView(APIView):
    def get(self, request):
        x = request.query_params.get('x')
        y = request.query_params.get('y')
        res = add.delay(x, y)
        return APIResponse(msg=str(res.get()))
    
   
# http://127.0.0.1:8000/api/v1/user/celery/?x=10&y=19

参考资料:
https://celery.xgqyq.com/Django.html
https://pythondjango.cn/django/advanced/12-sync-periodic-tasks-with-celery/
https://www.jianshu.com/p/39fa4ac3a236

标签:CELERY,解决方案,py,redis,django,celery,api,luffy
From: https://www.cnblogs.com/ccsvip/p/18220853

相关文章

  • celery通用解决方案(基于django老)
    通用方案移动项目celery_task到项目根目录在视图中写逻辑启动worker-->celery-Acelery_taskworker-ldebug-Peventlet运行django,正常使用接口#1把之前的celery_task移动过到项目根路径,然后开启worker#2在视图函数中提交任务#fromlibs.tx_smsimportg......
  • 初始celery
    使用celery前的一些注意事项res=add.delay(x,y)print(res.id)#这个id才是真正的任务id#安装pipinstallcelery#安装redis(消息队列和结果存储使用redis)pipinstallredis#windows安装,mac和Linux不需要安装下面的包pipinstalleventlet#官网解释#Celeryi......
  • django 多数据库接入相关操作
    多数据库注册在配置文件中的default同级进行注册即可DATABASES={"default":{.....},"aaa":{.....},"bbb":{.....},}建立数据表模型模型建立后做一些操作让使用更加便携,其他使用此模型的时候正常  Aaa......
  • 我的 Django 注册页面重定向不起作用
    我正试图为我的Django项目制作一个注册页面。当我编译注册表单时,它出现了图片中的错误,因为它试图转到以下路径(hedoublesusers/register):localhost/users/register/users/register/。我的代码如下:......
  • 基于TAE的数字钥匙自动化测试解决方案
    方案概述    在汽车发展和用户需求的推动下,汽车钥匙开始从传统的机械钥匙向数字化、智能化方向发展。目前常见的数字钥匙集成了蓝牙、NFC、UWB等技术实现了移动设备与车端的通信,可以帮助用户便捷的实现车辆功能控制。随着数字钥匙的广泛应用,相关的测试需求也进一步增加,人......
  • python社区宠物登记养宠交流系统vue+flask_django包调试pycharm
    有何创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、快捷、高效用户具体功能如下:1、社区管理员:注册、登录、个人信息管理、发帖管理、评论管理、宠物规范管理、社区用户管理、宠物类别管理、宠物信息管理(查询宠物信息,修改宠物信息,删......
  • 不同解决方案的比较
    共享磁盘故障转移共享磁盘故障转移通过仅拥有一个数据库副本来避免同步开销。它使用由多台服务器共享的单个磁盘阵列。如果主数据库服务器发生故障,备用服务器能够挂载并启动数据库,就像从数据库崩溃中恢复一样。这允许快速故障转移而不会丢失数据。共享硬件功能在网络存储设备中......
  • 星汉云管理网络解决方案,助力企业网络升级和业务发展
    为了应对数字化时代企业网络面临的新挑战,映翰通推出基于云管理的新一代网络解决方案,可灵活应用于连锁门店、企业办公等网络场景。映翰通星汉云管理网络解决方案包括云管理的边缘路由器、AP、交换机、5GODU蜂窝产品及小星云管家SaaS服务,通过整合创新的IT管理、物联网、5G等技术......
  • java: 错误: 不支持发行版本 5的解决方案
    file->setting修改以下信息 修改pom.xml,添加以下代码<properties>    <maven.compiler.source>17</maven.compiler.source>    <maven.compiler.target>17</maven.compiler.target>  </properties>......
  • Django学习-虚拟环境创建、URL组成部分详解
    一、创建一个Django的虚拟环境 生成虚拟环境在D:\Virtualenvs下 在pycharm中引入django虚拟环境 二、URL详解 URL,统一资源定位符,一个URL由以下几部分组成:scheme://host:port/path/?query-string=xxx#anchorscheme:代表的是访问的协议,一般为http或者https以及ftp等h......