博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

异步任务队列 celery --- http://celeryproject.org/

Posted on 2012-08-30 11:12  刘乐  阅读(213)  评论(0)    收藏  举报

celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作,但对调度支持也很好。

celery用于生产系统每天处理数以百万计的任务。

celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。

建议的消息代理RabbitMQ的,但提供有限支持RedisBeanstalkMongoDBCouchDB, ,和数据库(使用SQLAlchemy或Django的 ORM) 。

 

celery是易于集成Django, Pylons and Flask,使用 django-celerycelery-pylons and Flask-Celery 附加包即可。

例子:

两个数相加的例子:

 

from celery.task import task@taskdef add(x, y):    return x + y

你可以后台运行,或者等待它完成:

>>>result=add.delay(8,8) >>>result.wait()# wait for and return the result16


方法1:
import sched, time
import os
s = sched.scheduler(time.time, time.sleep)
#scheduler的两个参数用法复杂,可以不做任何更改
def  playmusic(x):
    os.system(x)
def jobtodo():
     tmlist = [2011,8,11,22,15,0,0,0,0]
     x1=time.mktime(tmlist)
     x2=time.time()
     y=x1-x2
#计算任务到现在的时间长度
     s.enter(y, 1, playmusic, ('mplayer  /home/c.mp3',))
#四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,给他
#的参数(注意:一定要以tuple给如,如果只有一个参数就(xx,))
     s.run()
     print time.time()
jobtodo()

方法2
import os
import time
from threading import Timer
def  playmusic(x):
    os.system(x)

def jobtodo():
     tmlist = [2011,8,11,22,40,0,0,0,0]
     x1=time.mktime(tmlist)
     x2=time.time()
     y=x1-x2
     Timer(y, playmusic, ('mplayer  /home/b.mp3',)).start()

jobtodo()



celery+ rabbitMq + python linux是停配置
celery+ rabbitMq + python linux是下配置
废话不多说,安装需要的东西都必须有  python  jdk

然后 erlang 

下载安装包  然后 


                            RabbitMQ安装 
1. Erlang 安装 

wget http://www.erlang.org/download/otp_src_R14B.tar.gz  
tar -zxf otp_src_R14B01.tar.gz  
cd otp_src_R14B01  
./configure  
make  
sudo make install 
注意在make install 时使用root权限 

2.RabbitMQ安装 

wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.3.1/rabbitmq-server-2.3.1.tar.gz  
tar -zxf rabbitmq-server-2.3.1.tar.gz  
cd rabbitmq-server-2.3.1 
sudu   make TARGET_DIR=/u/rabbitmq SBIN_DIR=/u/rabbitmq/sbin MAN_DIR=/u/rabbitmq/man install 
注意在make install 时使用root权限 ,TARGET_DIR等三个路径对用户可见 
如果 机器上python 版本为2.6以下版本 会提示You don't appear to have simplejson.py installed  安装SimpleJson

3.SimpleJson安装(python 2.6以下安装) 
http://pypi.python.org/packages/source/s/simplejson/simplejson-2.1.3.tar.gz#md5=58d9b1d8fa17ea4ce205cea088607e02 

wget http://pypi.python.org/packages/source/s/simplejson/simplejson-2.1.3.tar.gz#md5=58d9b1d8fa17ea4ce205cea088607e02  
tar -zxf simplejson-2.1.3.tar.gz 
cd simplejson-2.1.3 
CP simplejson 到 python安装目录下 如: /usr/local/lib/python2.5 


4. xmlto (rabbitmq 编译安装时需要使用) 
wget  https://fedorahosted.org/releases/x/m/xmlto/xmlto-0.0.23.tar.gz  
tar -zxf xmlto-0.0.23.tar.gz 
cd xmlto-0.0.23 
./configure  
make  
sudo make install 


5. 配置 rabbitmq 
cd rabbitmq/sbin 
rabbitmq-server文件中有三个参数修改为本用户可见目录 
#Eralng控制文件 
CONFIG_FILE= 
#日志文件 
LOG_BASE= 
#数据库文件 
MNESIA_BASE= 

6.启动RabbitMQ 
cd rabbitmq/sbin 
./rabbitmq-server start 
或设置后台运行 nohup ./rabbitmq-server start > nohup.out& 

成功启动后会有如下提示: 
Activating RabbitMQ plugins ... 
0 plugins activated: 
+---+   +---+ 
|   |   |   | 
|   |   |   | 
|   |   |   | 
|   +---+   +-------+ 
|                   | 
| RabbitMQ  +---+   | 
|           |   |   | 
|   v2.3.1  +---+   | 
|                   | 
+-------------------+ 
AMQP 0-9-1 / 0-9 / 0-8 
Copyright (C) 2007-2011 VMware, Inc. 
Licensed under the MPL.  See http://www.rabbitmq.com/ 
broker running