Django+celery+eventlet+flower+redis异步任务创建及查询实现
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')
Django+celery+eventlet+flower+redis异步任务创建及查询实现的更多相关文章
- django框架下celery+rabbitmq+flower完成异步任务
[转载请注明出处:] http://www.cnblogs.com/yukityan/p/8035787.html 环境: ubuntu16.04 64位 安装: sudo apt-get insta ...
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- 使用django + celery + redis 异步发送邮件
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- Celery+python+redis异步执行定时任务
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- Django+Celery 执行异步任务和定时任务
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis环境配置
celery是python开发的分布式任务调度模块 Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,celery支持的消息服务有RabbitMQ,redis甚至是数据库,redis ...
随机推荐
- 【WALT】scale_exec_time() 代码详解
@ 目录 [WALT]scale_exec_time() 代码详解 代码展示 代码逻辑: 为什么归一化? ⑴ 将 CPU cycles 转换为 CPU 当前频率 ⑵ 归一化 delta [WALT]s ...
- Hexo博客Next主题文章置顶相关
我需要写一些文章做推荐相关,需要文章置顶功能 博客效果 置顶方法配置 一.修改库文件 原理 在Hexo生成首页HTML时,将top值高的文章排在前面,达到置顶功能. 修改方法 修改Hexo文件夹下的n ...
- Nginx TCP 负载均衡:stream 模块配置
工作上遇到需要用nginx做负载均衡,参考了前同事留下的作业顺利搞定,感觉这块很有意义写篇文档记录. 参考:nginx tcp负载均衡(Stream模块)配置说明 参考:利用nginx进行TCP负载均 ...
- Chrome 报错: Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
经检查,是由浏览器中的插件导致的报错. 解决方案: 将该插件移除或关闭
- sqli笔记
MySQL数据库自带的数据库information_schema 里面有三个比较重要的表 SCHEMATA .TABLES . COLUMNS 保存数据库所有的数据库名 表名 字段名 SCHEM ...
- Redis从入门到放弃(7):主从复制
1.概念 主从复制是Redis的一项重要特性,用于将一个Redis服务器(Master主节点)的数据复制到其他Redis服务器(Slave从节点),以实现数据的高可用性和读写分离.数据的复制是单向的, ...
- 使用TypeScript类型注解,编写更干净的JS代码
TypeScript 可以看作是 JavaScript 的超集,不仅包含了 JavaScript 的所有内容,还拓展了语法.规定了类型约束,使得我们可以编写更干净.完整的代码. 类型注解 TypeSc ...
- 【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度
编写一个函数,返回两个数字的和.输入数字是字符串,函数必须返回一个字符串. 示例: 添加("123","321"):->"444" 添 ...
- 【pandas小技巧】--DataFrame的显示参数
我们在jupyter notebook中使用pandas显示DataFrame的数据时,由于屏幕大小,或者数据量大小的原因,常常会觉得显示出来的表格不是特别符合预期. 这时,就需要调整pandas显示 ...
- 谁家面试往死里问 Swagger 啊?
大家好,我是小富- 前言 说个挺奇葩的事,有个老铁给我发私信吐槽了一下它的面试经历,他去了个国企单位面试,然后面试官跟他就Swagger的问题聊了半个多小时.额- 面试嘛这些都不稀奇,总能遇到是千奇百 ...