Celery+Rabbitmq实现异步任务

一. 安装celery,再安装rabbitmq或redis

pip install celery

rabbitmq和redis安装其中一个就可以了,celery官方文档里说用两个都可以,但优先推荐rabbitmq,具体怎么安装可以自己找一下教程.

二. 搭建celery任务架构

  1. 在项目中适合的位置创建一个celery_tasks目录,在这个目录下写celery的代码,将celery代码与项目
    业务逻辑代码独立开.当然也可以不分开,具体根据项目的代码量和实际需要来使用.
    注意:目录名不要直接叫celery,不要与python关键字,第三方模块的名字冲突,否则导致导包出错
  2. 在新建的目录下创建config.py,tasks.py,main.py三个python文件分别用于编写celery的配置代码,任务函数代码和任务启动代码
# 目录结构
- celery_tasks- config.py- main.py- tasks.py

三. 编写代码实现异步调用任务

  1. 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')
  1. 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文件,然后在这里调用即可')
  1. 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相关资料
解决办法:

  1. 安装eventlet
pip install eventlet
  1. 启动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实现异步任务相关推荐

  1. Celery+django+redis异步执行任务

    Celery+django+redis异步执行任务 本文用到的各工具版本: celery 4.0.2 django 1.10.3 redis 3.2.6 特别注意: 如果你的项目是django框架,那 ...

  2. springboot项目系列-论坛系统06整合rabbitmq实现异步发邮件

    springboot项目系列-博客系统06整合rabbitmq实现异步发邮件 今天突发奇想,既然会了rabbitmq为何不用,之前的注册发邮件功能是使用springboot的异步任务做的,但是想想以后 ...

  3. django框架下celery+rabbitmq+flower完成异步任务

    [转载请注明出处:] http://www.cnblogs.com/yukityan/p/8035787.html 环境: ubuntu16.04 64位 安装: sudo apt-get insta ...

  4. Python项目实战 3.4:异步消息队列.Celery+RabbitMQ

    RabbitMQ是基于erlang的,所以需要先安装一下erlang Erlang下载地址:Downloads - Erlang/OTP RabbitMQ下载地址:Downloading and In ...

  5. Celery - 一个懂得 异步任务 , 定时任务 , 周期任务 的芹菜

    1.什么是Celery? Celery 是芹菜 Celery 是基于Python实现的模块, 用于执行异步定时周期任务的 其结构的组成是由     1.用户任务 app     2.管道 broker ...

  6. Django + Nginx + Uwsgi + Celery + Rabbitmq 做一个高速响的应网站架构

    Django :渲染页面,站点访问控制,管理网站,网站框架 Nginx:ip访问管理,数据传输控制 Uwsgi:处理链接Diango和Nginx的传输协议,也可以看作是处理客户端数据和Django之间 ...

  7. 使用celery的backend异步获取结果

    惯例先贴出相关参考的文档: http://docs.celeryproject.org/en/stable/getting-started/next-steps.html http://docs.ce ...

  8. python使用rabbitmq阻塞_python – Celery/RabbitMQ unacked消息阻塞队列?

    我已经调用了一个任务,用urllib2远程获取一些信息几千次.这些任务是使用随机eta(一周内)安排的,因此它们都不会同时命中服务器.有时我会得到404,有时候不会.我正在处理错误,以防它发生. 在R ...

  9. python项目开发:用RabbitMQ实现异步RPC

    程序要求: 1. 用Rabbit MQ实现RPC 1. 可以异步地执行多条命令 2. 可以对一次性对多个机器执行命令 程序效果: --->run dir host1 host2 .... --- ...

最新文章

  1. IDEA的常用操作(快捷键)
  2. @程序员:Java平均工资再次上涨,光张年限不涨薪的我慌了!
  3. Web ReplayType?
  4. 2016 ACM/ICPC Asia Regional Dalian Online
  5. 建立数据库的原则(怎样建立一个好的数据库)
  6. android p正式版,国内首家!一加正式推送Android P正式版
  7. java nio copy_使用NIO快速复制Java文件
  8. python使用opencv保存视频_Pythone OpenCV学习笔记之:视频文件读取与保存
  9. 怎样在Windows 2016 Hyper-V上创建虚拟机
  10. Unix/Linux操作系统介绍
  11. 蜂鸣器驱动电路图大全(五款蜂鸣器驱动电路原理图)
  12. 基于大数据的高校贴吧舆情数据分析系统
  13. 异常值离群点检测算法---箱线图四分位检测
  14. python基本函数的导数公式_算法中的微积分:5大函数求导公式让你在面试中脱颖而出...
  15. 2020 用html jQuery实现广告轮播图自动切换 滚动页面 鼠标悬浮下标且左右切换图片
  16. win7访问局域网计算机提示凭据,win7系统访问局域网共享文件时提示输入网络凭据的解决方法?...
  17. Office(Word/Excel/PPT)问题集
  18. 电脑实时监控信息:CPU 内存 GPU使用率在桌面上动态展现
  19. Unity3D实战【七】Cinemachine Post Processing 摄像机跟踪和后处理
  20. 十八家省级大数据管理局盘点

热门文章

  1. Java Concurrent--死锁/饥饿/活锁
  2. Python学习入门基础教程(learning Python)--1.2.1 Python输出语句print基本使用 .
  3. SharePoint 2010认证模式
  4. ibatis+Castle.MCV 版 NPetshop3
  5. GitHub+Vue自动化构建部署
  6. 容器编排技术 -- Kubernetes kubectl rollout resume 命令详解
  7. 容器编排技术 -- 了解Kubernetes对象
  8. MongoDB与Spring集成教程
  9. BlockChain:区块链入门课程 -- 区块链应用于能源 POWER LEDGER案例
  10. java 课后习题 输出正整数的顺序相反数