现在的位置: 首页 > 综合 > 正文

beanstalkc简易指令说明集

2012年04月11日 ⁄ 综合 ⁄ 共 2692字 ⁄ 字号 评论关闭

 

一、job的操作

put(建立一个job)

将一个job加入到当前tube中、然后马上设置job状态为“Ready”比如

>>> beanstalk.put('hey!')

注意put指令只能接受字符串、任何非字符串如整型45都是错误的、迩还可以推迟它的执行、让她的状态延迟N秒后才把状态设置为“Ready”、如

>>> beanstalk.put('yes!', delay=1)

还可以为该job设置一个优先级、最高优先级是0、然后数字越大优先级越低、

>>> _ = beanstalk.put('foo', priority=42)

>>> _ = beanstalk.put('bar', priority=21)

>>> _ = beanstalk.put('qux', priority=21)

 

>>> job = beanstalk.reserve() ; print job.body ; job.delete()

bar

>>> job = beanstalk.reserve() ; print job.body ; job.delete()

qux

>>> job = beanstalk.reserve() ; print job.body ; job.delete()

foo

 

 

release(提前放监一个job)

如果迩使用了delay来延迟一个job、后来又反悔了、那么迩可以使用release来提前释放这个job、让它早日回归当前tube并设置为“Ready”状态、但迩不可以对非当前tube的job使用release命令、要获取非当前tube的job可以通过peek命令

>>> beanstalk.put('yes!', delay=900)
>>> job.release()
>>> job.stats()['state']
'ready'

 

reserve(获取一个job)

put是往tube里加入job、那么reserve指令则是从tube里取出job、默认情况下、reserve是按job的序号从小取到大、如果像上面使用put设置了job的优先级那么是按优先级高的job取值、如果优先级同等级、那么再按序号从小取到大

 

>>> beanstalk.reserve(timeout=0) is None
True

 

另外reserve可以如上所示设置timeout的时间参数、如果把时间设置为0、则任何时候都直接报timeout而造成获取job失败、迩可以设置任何一个非负数作为timeout的时间、如果超过timeout的时间、那么这次的获取job的动作就会结束、等待下次再次调用reserve指令来获取job、而没有被获取的job则将置于“Ready”状态等待下次再次被reserve所调用

 

 

delete(删除一个job)

任何时间迩不爽这个job都可以调用delete指令来删除这个job

>>> job.delete()

 

 

 

bury(让一个job睡觉去)

和使用delay参数不同、如果迩不使用kick把它踢醒、它将永远处于沉睡状态、但迩不可以对非当前tube的job使用bury命令、要获取非当前tube的job可以通过peek命令

 

>>> job = beanstalk.reserve()
>>> job.bury()
>>> job.stats()['state']
'buried'

 

kick(把一个正在睡觉的job叫醒)

默认情况下、先叫醒最早睡觉的那个job

>>> beanstalk.kick()
1

这个命令还可以加个参数设置唤醒的数量、比如加上42、一次过唤醒42个job、还按照最先睡觉的那个job开始、先就是先进先出原则

 

>>> beanstalk.kick(42)
0

 

 

peek(查找并切换成目标job)

查找序号为3的job、也就是第三个建立的job、如果该序号不存在、那么返回空值None

>>> job = beanstalk.peek(3)
>>> job.body
'yes!'

 

 

peek_ready (查找并切换当前tube最先进入准备状态的job)

使用beanstalk获取最早一个处于“Ready”状态的job、注意、只能获取当前tube的job

>>> job = beanstalk.peek_ready()
>>> job.body
'yes!'

 

类似的命令还有peek_delayed和peek_buried、都是只能在当前tube里取job的、不支持跨tube取job

 

 

peek_delayed(查找并切换当前tube延迟时间最短的job)

>>> beanstalk.put('o tempores', delay=120)
4
>>> job = beanstalk.peek_delayed()
>>> job.stats()['state']
'delayed'

 

 

 

peek_buried(查找并切换当前tube最先睡觉的job)

>>> beanstalk.put('o mores!')
5
>>> job = beanstalk.reserve()
>>> job.bury()
 
>>> job = beanstalk.peek_buried()
>>> job.stats()['state']
'buried'

 

二、tube操作

任何的job都是被置于tube中存放的、

tubes或watching(查看所有tube)

查看所有的tube

>>> beanstalk.tubes()

['default']

默认情况下、只存在一个tube、而这个tube的名称叫作“default”、这个管道一定会存在、不能被删除、其它的tube迩可以任意删除

 

 

 

ignore(删除tube)

迩可以使用ignore命令来删除任意非“default”的管道

>>> beanstalk.ignore('weibo')
1

 

use或watch(添加或者切换一个tube)

迩可以使用use或watch来添加或者切换一个tube、如果tube名称不存在、则创建一个同名tube、如果存在就切换到该tube下

>>> beanstalk.use('foo')
'foo'

 

 

using(查看当前使用的tube)

 

迩可以使用using来查看当前使用的tube是什么

>>> beanstalk.using()
'default'

 

 

 

 

三、关闭beanstalk连接

>>> beanstalk.close()

 

 

 

 

参考文档:http://www.slideshare.net/hitkidnil/beanstalk-protocol

参考文档:https://github.com/earl/beanstalkc/blob/master/TUTORIAL.mkd

 

抱歉!评论已关闭.