Celery+Rabbitmq实现异步任务
Celery+Rabbitmq实现异步任务
一. 安装celery,再安装rabbitmq或redis
pip install celery
rabbitmq和redis安装其中一个就可以了,celery官方文档里说用两个都可以,但优先推荐rabbitmq,具体怎么安装可以自己找一下教程.
二. 搭建celery任务架构
- 在项目中适合的位置创建一个celery_tasks目录,在这个目录下写celery的代码,将celery代码与项目
业务逻辑代码独立开.当然也可以不分开,具体根据项目的代码量和实际需要来使用.
注意:目录名不要直接叫celery,不要与python关键字,第三方模块的名字冲突,否则导致导包出错 - 在新建的目录下创建config.py,tasks.py,main.py三个python文件分别用于编写celery的配置代码,任务函数代码和任务启动代码
# 目录结构
- celery_tasks- config.py- main.py- tasks.py
三. 编写代码实现异步调用任务
- config.py
from celery import Celery# 创建celery对象app,demo是对celery对象的命名,自定义,见名知义即可
# broker指定后端代理,可以使用mq或redis,主要起到任务队列的作用
app = Celery('demo', broker='amqp://guest@localhost:5672//')
# app = Celery('demo', broker='redis://127.0.0.1:6379/15')
- tasks.py
from config import app# 定义任务,使用celery对象.task装饰任务,celery即可自动识别任务
@app.task(name='celery_task1_name')
def celery_task1_name(arg):print('编写需要执行的任务代码', arg)@app.task(name='celery_task2_name')
def celery_task2_name():print('将需要执行的代码导入tasks.py文件,然后在这里调用即可')
- main.py
from tasks import *# 设置celery对象自动识别任务,'celery_tasks'指定tasks.py的目录,保证程序能找到tasks.py
app.autodiscover_tasks(['celery_tasks'])
四. 启动celery任务
找到main.py所在目录下,执行如下命令,如果不在此目录,则main前要写相对路径,如:celery_tasks.main
celery -A main worker -l info
-A 指定celery的启动入口main,worker为celery执行任务的后端工人,-l指定日志级别为info
执行成功后,celery就会启动worker,从代理队列中获取任务并执行,如果任务队列为空,则一直等待到有任务
Windows Bug:如果Celery4.0以上的版本在Windows上使用,通过上面的启动命令启动,在执行task.delay()时会报错:ValueError: not enough values to unpack (expected 3, got 0)
Linux不会出现此问题,Windows才有,与“绿色线程”有关,具体阅读eventlet相关资料
解决办法:
- 安装eventlet
pip install eventlet
- 启动worker时增加-P eventlet参数
celery -A main worker -l info -P eventlet
五. 调用celery异步执行任务
在需要执行异步任务的地方导入任务,使用task.delay(参数)调用任务
如:与celery_tasks目录同级的demo目录下有一个demo.py文件,我在demo.py中异步执行任务
from celery_tasks.main import celery_task1_name, celery_task2_namedef demo_func(a):# 调用格式:任务名.delay(参数)celery_task1_name.delay(a)print('celery_task1_name执行完成:{}!'.format(a))celery_task2_name.delay()print('celery_task1_name执行完成!')demo_func('hello celery!')
Celery+Rabbitmq实现异步任务相关推荐
- Celery+django+redis异步执行任务
Celery+django+redis异步执行任务 本文用到的各工具版本: celery 4.0.2 django 1.10.3 redis 3.2.6 特别注意: 如果你的项目是django框架,那 ...
- springboot项目系列-论坛系统06整合rabbitmq实现异步发邮件
springboot项目系列-博客系统06整合rabbitmq实现异步发邮件 今天突发奇想,既然会了rabbitmq为何不用,之前的注册发邮件功能是使用springboot的异步任务做的,但是想想以后 ...
- django框架下celery+rabbitmq+flower完成异步任务
[转载请注明出处:] http://www.cnblogs.com/yukityan/p/8035787.html 环境: ubuntu16.04 64位 安装: sudo apt-get insta ...
- Python项目实战 3.4:异步消息队列.Celery+RabbitMQ
RabbitMQ是基于erlang的,所以需要先安装一下erlang Erlang下载地址:Downloads - Erlang/OTP RabbitMQ下载地址:Downloading and In ...
- Celery - 一个懂得 异步任务 , 定时任务 , 周期任务 的芹菜
1.什么是Celery? Celery 是芹菜 Celery 是基于Python实现的模块, 用于执行异步定时周期任务的 其结构的组成是由 1.用户任务 app 2.管道 broker ...
- Django + Nginx + Uwsgi + Celery + Rabbitmq 做一个高速响的应网站架构
Django :渲染页面,站点访问控制,管理网站,网站框架 Nginx:ip访问管理,数据传输控制 Uwsgi:处理链接Diango和Nginx的传输协议,也可以看作是处理客户端数据和Django之间 ...
- 使用celery的backend异步获取结果
惯例先贴出相关参考的文档: http://docs.celeryproject.org/en/stable/getting-started/next-steps.html http://docs.ce ...
- python使用rabbitmq阻塞_python – Celery/RabbitMQ unacked消息阻塞队列?
我已经调用了一个任务,用urllib2远程获取一些信息几千次.这些任务是使用随机eta(一周内)安排的,因此它们都不会同时命中服务器.有时我会得到404,有时候不会.我正在处理错误,以防它发生. 在R ...
- python项目开发:用RabbitMQ实现异步RPC
程序要求: 1. 用Rabbit MQ实现RPC 1. 可以异步地执行多条命令 2. 可以对一次性对多个机器执行命令 程序效果: --->run dir host1 host2 .... --- ...
最新文章
- IDEA的常用操作(快捷键)
- @程序员:Java平均工资再次上涨,光张年限不涨薪的我慌了!
- Web ReplayType?
- 2016 ACM/ICPC Asia Regional Dalian Online
- 建立数据库的原则(怎样建立一个好的数据库)
- android p正式版,国内首家!一加正式推送Android P正式版
- java nio copy_使用NIO快速复制Java文件
- python使用opencv保存视频_Pythone OpenCV学习笔记之:视频文件读取与保存
- 怎样在Windows 2016 Hyper-V上创建虚拟机
- Unix/Linux操作系统介绍
- 蜂鸣器驱动电路图大全(五款蜂鸣器驱动电路原理图)
- 基于大数据的高校贴吧舆情数据分析系统
- 异常值离群点检测算法---箱线图四分位检测
- python基本函数的导数公式_算法中的微积分:5大函数求导公式让你在面试中脱颖而出...
- 2020 用html jQuery实现广告轮播图自动切换 滚动页面 鼠标悬浮下标且左右切换图片
- win7访问局域网计算机提示凭据,win7系统访问局域网共享文件时提示输入网络凭据的解决方法?...
- Office(Word/Excel/PPT)问题集
- 电脑实时监控信息:CPU 内存 GPU使用率在桌面上动态展现
- Unity3D实战【七】Cinemachine Post Processing 摄像机跟踪和后处理
- 十八家省级大数据管理局盘点
热门文章
- Java Concurrent--死锁/饥饿/活锁
- Python学习入门基础教程(learning Python)--1.2.1 Python输出语句print基本使用 .
- SharePoint 2010认证模式
- ibatis+Castle.MCV 版 NPetshop3
- GitHub+Vue自动化构建部署
- 容器编排技术 -- Kubernetes kubectl rollout resume 命令详解
- 容器编排技术 -- 了解Kubernetes对象
- MongoDB与Spring集成教程
- BlockChain:区块链入门课程 -- 区块链应用于能源 POWER LEDGER案例
- java 课后习题 输出正整数的顺序相反数