转 Celery 使用
http://www.mamicode.com/info-detail-1798782.html
https://blog.csdn.net/lu1005287365/article/details/52315786
本系列文章的开发环境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
在我们日常的开发工作中,经常会遇到这几种情况:
1、在web应用中,用户触发一个操作,执行后台处理程序,这个程序需要执行很长时间才能返回结果。怎样才能不阻塞http请求,不让用户等待从而提高用户体验呢?
2、定时任务脚本:生产环境经常会跑一些定时任务脚本,假如你有上千台的服务器、上千种任务,定时任务的管理很困难,如何对job进行有效的管理?
3、异步需求:比如发送短信/邮件、推送消息、清理/设置缓存?
如果你有以上的需求,那么Celery可能对你很有用。
Celery - 分布式任务队列系统
Celery是一个可以处理大量消息的分布式任务系统,它凭借简单、灵活、可靠的特性被广泛使用。Celery聚焦于实时处理任务,同时也支持定时的任务调度。
1、特性:
- 查看定时任务的执行情况,比如执行是否成功、当前状态、执行任务花费的时间等。
- 易于其他框架集成,如使用django管理后台添加、更新、删除任务。
- 方便把任务和配置管理相关联。
- 可选多进程、Eventlet和Gevent三种模式并发执行。
- 提供错误处理机制。
2、架构图
从上图中可以知道Celery包含如下组件:
- Producer:凡是调用了Celery API、函数或装饰器而产生任务并交给任务队列处理的都是任务生产者。
- 任务调度组件:Beat进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列。
- Celery Worker:负责执行任务的线程,可以在多台服务器运行提高执行效率。
- Broker:消息中间件,负责接受任务生产者的任务,并且转发work进行执行。Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等作为消息中间件,官方推荐使用RabbitMQ。
- Result Backend:任务处理完后保存状态信息和结果,以供查询。Celery默认已支持Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy等方式。
开始使用Celery
这里Broker和Result Backend都选择RabbitMQ。
1、安装
2) 安装Celery 3.1.25
为什么选择这个低版本?请见最下面的问题列表。
pip install celery==3.1.25
2、一个简单例子
2.1) 在一个目录中创建tasks.py文件,内容如下:
from celery import Celery
#创建celery实例,其中backend表示采用rpc瞬态信息,不保存到数据库;broker表示连接RabbitMQ URL
app = Celery(‘tasks‘,backend=‘rpc://‘,broker=‘pyamqp://guest@localhost//‘) @app.task
def hello():
return "hello celery"
2.2) 启动celery worker
到tasks.py文件那层目录,执行以下命令:
celery -A tasks worker --loglevel=info
启动输出信息如下:
E:\workdir\test_pro>celery -A tasks worker --loglevel=info
[2017-05-10 18:26:18,298: WARNING/MainProcess] c:\python27\lib\site-packages\celery\apps\worker.py:161: CDeprecationWarnin
Starting from version 3.2 Celery will refuse to accept pickle by default. The pickle serializer is a security concern as it may give attackers
the ability to execute any command. It‘s important to secure
your broker from unauthorized access when using pickle, so we think
that enabling pickle should require a deliberate action and not be
the default choice. If you depend on pickle then you should set a setting to disable this
warning and to be sure that everything will continue working
when you upgrade to Celery 3.2:: CELERY_ACCEPT_CONTENT = [‘pickle‘, ‘json‘, ‘msgpack‘, ‘yaml‘] You must only enable the serializers that you will actually use. warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) -------------- celery@507B9D97E083 v3.1.25 (Cipater)
---- **** -----
--- * *** * -- Windows-7-6.1.7601-SP1
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x35fc240
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: rpc://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery [tasks]
. tasks.hello [2017-05-10 18:26:18,433: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2017-05-10 18:26:18,483: INFO/MainProcess] mingle: searching for neighbors
[2017-05-10 18:26:19,497: INFO/MainProcess] mingle: all alone
[2017-05-10 18:26:19,523: WARNING/MainProcess] celery@507B9D97E083 ready.
2.3) 测试结果
另起一个终端,还是到tasks.py那层目录,进入python命令行:
这时celery worker会有提示信息:
到此为止,celery入门就介绍到这里了,下一节介绍如何在django中使用celery。
转 Celery 使用的更多相关文章
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- celery使用的一些小坑和技巧(非从无到有的过程)
纯粹是记录一下自己在刚开始使用的时候遇到的一些坑,以及自己是怎样通过配合redis来解决问题的.文章分为三个部分,一是怎样跑起来,并且怎样监控相关的队列和任务:二是遇到的几个坑:三是给一些自己配合re ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- celery 框架
转自:http://www.cnblogs.com/forward-wang/p/5970806.html 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据 ...
- celery使用方法
1.celery4.0以上不支持windows,用pip安装celery 2.启动redis-server.exe服务 3.编辑运行celery_blog2.py !/usr/bin/python c ...
- Celery的实践指南
http://www.cnblogs.com/ToDoToTry/p/5453149.html Celery的实践指南 Celery的实践指南 celery原理: celery实际上是实现了一个典 ...
- Using Celery with Djang
This document describes the current stable version of Celery (4.0). For development docs, go here. F ...
- centos6u3 安装 celery 总结
耗时大概6小时. 执行 pip install celery 之后, 在 mac 上 celery 可以正常运行, 在 centos 6u3 上报错如下: Traceback (most recent ...
- celery 异步任务小记
这里有一篇写的不错的:http://www.jianshu.com/p/1840035cb510 自己的"格式化"后的内容备忘下: 我们总在说c10k的问题, 也做了不少优化, 然 ...
- Celery 框架学习笔记
在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...
随机推荐
- hdu5521 Meeting
传送门 题目 Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated hi ...
- leetCode编程题
已知链表1->2->3->4,先需要删除3这个节点,请完成函数.注意,这里只给定要删除的节点3,并不知道3之前的节点是哪个,以及整个链表是什么节点. void delete(List ...
- SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论
典型的J2EE三层结构,分为表现层.中间层(业务逻辑层)和数据服务层.三层体系将业务规则.数据访问及合法性校验等工作放在中间层处理.客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与 ...
- U盘刻录14.10镜像出问题的解决方法
从几个月前的14.10 daily 版本就有U盘刻录无法启动的现象,相关bug可参见:https://bugs.launchpad.net/ubunt ... reator/+bug/1325801 ...
- xml知识点
XML 被设计用来传输和存储数据. HTML 被设计用来显示数据.应该掌握的基础知识:在您继续学习之前,需要对以下知识有基本的了解: HTML / XHTML JavaScript 如果您希望首先学习 ...
- 让 Winform 窗口悬浮的简单方式
很多次设置这个 TopMost 属性会莫名的不起作用,有时又可以.一直在想是为什么会这样? 后来多次尝试,发现这个属性必须在窗体某些其他属性后设置,比如在 Height.Width 这样的属性后. 看 ...
- c++滚动数组
说来惭愧,我老早以前就学习了dp,可直到最近才知道滚动数组. 所以说,滚动数组是什么呢? 它是一种优化dp空间复杂度的思想. 在dp转移时,我们往往不需要之前推的所有的,而是只需要前一两个转移的. 我 ...
- 浅聊本人学习React的历程——第一篇生命周期篇
作为一个前端小白,在踏入前端程序猿行业的第三年接触了React,一直对于框架有种恐惧感,可能是对陌生事物的恐惧心里吧,导致自己一直在使用原生JS和JQ作为开发首选,但是在接触了React之后,发现了其 ...
- Linux_Shell_ Map 的使用和遍历
定义初始化map declare -A map=([") 输出所有key echo ${map[@]} 输出key对应的值 "]} 遍历map for key in ${!map[ ...
- Velodyne VPL16 configuration in ROS Kinetic
1. 驱动安装 sudo apt-get install ros-kinetic-velodyne 2. 在已有工作空间catkin_ws中,添加Velodyne包 cd ~/catkin_ws/sr ...