首页 > 数据库 >Django+celery+eventlet+flower+redis异步任务创建及查询实现

Django+celery+eventlet+flower+redis异步任务创建及查询实现

时间:2023-10-24 10:12:17浏览次数:36  
标签:flower settings eventlet redis new celery file import py

1.环境版本:
Django 3.2.12
celery 5.3.4
eventlet 0.33.3
flower 2.0.1
redis 3.5.3
项目名称:new_project

2.celery配置(settings.py)

# celery
# django-celery  配置的部分
# Broker配置,使用Redis作为消息中间件
BROKER_URL = 'redis://127.0.0.1:6379/0'

# BACKEND配置,这里使用redis
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'

# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'

# 任务结果过期时间,秒
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24

# 时区配置
CELERY_TIMEZONE = 'Asia/Shanghai'

# # 指定导入的任务模块,可以指定多个
# CELERY_IMPORTS = (
#    'new_project.tasks',
# )

  3.celery.py配置(settings.py同目录)

import os
import django
from celery import Celery
from django.conf import settings

# 设置系统环境变量,安装django,必须设置,否则在启动celery时会报错
# djangoProject1.settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'new_project.settings')
django.setup()

celery_app = Celery('new_project')
celery_app.config_from_object('django.conf:settings')
celery_app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

所有官方配置参考:http://docs.celeryproject.org/en/latest/userguide/configuration.html

  4.__init__.py(settings.py同目录)

from .celery import celery_app

__all__ = ['celery_app']

  

5.任务配置(需要异步执行的方法,task.py与settings.py同目录)
说明:示例程序,转换pdf文件为doc,方法必须加上@shared_task装饰器

import random
from pdf2docx import Converter
from celery import shared_task

@shared_task
def change_file(file_path):
    docx_name = file_path[:-4] + str(random.randint(100000, 999999)) + '.doc'
    print("file_path: ", file_path)
    print("docx_name: ", docx_name)
    # 加载pdf文档
    cv = Converter(file_path)
    cv.convert(docx_name)
    cv.close()
    print("file success!")
    return 1024

  

6.启动Django项目
7.启动celery命令:celery -A new_project worker -l debug -P eventlet
8.启动flower命令:celery -A new_project flower,执行后会出现Visit me at http://0.0.0.0:5555,将ip替换为127.0.0.1即可访问

9.任务调用(一般为views.py)
说明:比如页面提交了一份文件,需要后台慢慢去处理的情况,下面在一个方法里面展示了调用任务和查询结果,用sleep模拟等待时间
调用时需要加上.delay方法进行异步处理,使用AsyncResult.get()获取结果,state和get()结果分别是SUCCESS 和1024

def file(request):
    file = "E:\\new_project\static\\tc.pdf"
    res = change_file.delay(file)
    print("res", res)

    num = 0
    while num < 30:
        num += 1
        ar = result.AsyncResult(str(res))
        # print("ar", ar)
        if ar.ready():
            print(ar.state, ar.get())
        else:
            print(ar.state)
        sleep(2)
    return render(request, 'file.html')

  

标签:flower,settings,eventlet,redis,new,celery,file,import,py
From: https://www.cnblogs.com/lytcreate/p/17784095.html

相关文章

  • centos安装redis
    redis安装1、安装gcc环境如果没有安装gcc会出现错误(此时需要删除文件夹重新解压)    yuminstallgcc-c++2、redis-5.0.5.tar.gz下载    官网下载地址:https://redis.io/download3、上传redis安装包   上传“redis-5.0.5.tar.gz”到/opt/softwar......
  • Redis主从复制部署小结
    Redis主从搭建主从架构单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主从数据同步原理全量同步主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝给slave节点,流程:这里有一个问题,master如何得知salve是第一......
  • redis 配置文件 - 启动redis 使用文件配置启动
    #Redisconfigurationfileexample.##Notethatinordertoreadtheconfigurationfile,Redismustbe#startedwiththefilepathasfirstargument:##./redis-server/path/to/redis.conf#Noteonunits:whenmemorysizeisneeded,itispos......
  • Redis秒杀
    全局ID生成器当用户抢购时,就会生成订单并保存到订单这张表中,而订单表如果使用数据库自增ID就存在一些问题:●id的规律性太明显,用户可以进行猜测●受单表数据量的限制全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性:●唯一性●高可用●高性能●递增......
  • 监听redis过期的key
       packagecom.ccxgf.configuration;importcom.fasterxml.jackson.annotation.JsonAutoDetect;importcom.fasterxml.jackson.annotation.PropertyAccessor;importcom.fasterxml.jackson.databind.ObjectMapper;importlombok.RequiredArgsConstructor;importorg.sprin......
  • Redis和Spring Boot:如何协作提高您的应用程序性能
    环境说明:Windows10+Idea2021.3.2+Jdk1.8+SpringBoot2.3.1.RELEASE前言Redis是一种高效的非关系型数据库,能够支持复杂的数据结构和操作。在SpringBoot应用中,集成Redis可以提供更好的性能和扩展性。本文将介绍如何在SpringBoot应用中集成Redis并使用其基本功能......
  • Redis的速度不够用?为什么你应该考虑使用 KeyDB,一个更快、更强大、更灵活的开源数据库
    https://www.cnblogs.com/anech/p/17776855.html KeyDB 一个由 Snap 提供支持、专为扩展而构建的开源数据库。它是 Redis 的高性能分支,专注于多线程、内存效率和高吞吐量。KeyDB 采用 MVCC 体系结构,允许您执行 KEYS 和 SCAN 等查询,而不会阻塞数据库并降低性能。Key......
  • Redis 命令操作
    一、连接命令ping通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。如果连接正常就返回一个PONG,否则返回一个连接错误。127.0.0.1:6379>pingPONGechom打印一个特定的信息m,测试时使用。127.0.0.1:6379>echo'helloworld'"helloworld"selecti切换......
  • Redis 哨兵模式
    哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵进程,这些进程使用流言协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。一、哨兵模式概述1.1、为什么要启动哨兵模式当我们的主服务器宕机后,要手动的......
  • Redis 集群
    sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数......