将一个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
如果迩使用了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所调用
任何时间迩不爽这个job都可以调用delete指令来删除这个job
>>> job.delete()
和使用delay参数不同、如果迩不使用kick把它踢醒、它将永远处于沉睡状态、但迩不可以对非当前tube的job使用bury命令、要获取非当前tube的job可以通过peek命令
>>> job = beanstalk.reserve()
>>> job.bury()
>>> job.stats()['state']
'buried'
默认情况下、先叫醒最早睡觉的那个job
>>> beanstalk.kick()
1
这个命令还可以加个参数设置唤醒的数量、比如加上42、一次过唤醒42个job、还按照最先睡觉的那个job开始、先就是先进先出原则
>>> beanstalk.kick(42)
0
查找序号为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'
任何的job都是被置于tube中存放的、
watching
(查看所有tube)
查看所有的tube
>>> beanstalk.tubes()
['default']
默认情况下、只存在一个tube、而这个tube的名称叫作“default”、这个管道一定会存在、不能被删除、其它的tube迩可以任意删除
迩可以使用ignore命令来删除任意非“default”的管道
>>> beanstalk.ignore('weibo')
1
迩可以使用use或watch来添加或者切换一个tube、如果tube名称不存在、则创建一个同名tube、如果存在就切换到该tube下
>>> beanstalk.use('foo')
'foo'
迩可以使用using来查看当前使用的tube是什么
>>> beanstalk.using()
'default'
>>> beanstalk.close()
参考文档:http://www.slideshare.net/hitkidnil/beanstalk-protocol
参考文档:https://github.com/earl/beanstalkc/blob/master/TUTORIAL.mkd