本文主要是介绍beanstalkc Tutorial 中文版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
英文原版:https://github.com/earl/beanstalkc/blob/wip-doc-rtfd/doc/tutorial.rst
背景介绍:
Beanstalk,一个高性能、轻量级的分布式内存队列系统。而beanstalkc是Beanstalk的一个python客户端库。看题主写的通俗易懂,就直接翻译过来。
开始:
启动服务端beanstalkd进程来监听14711端口,可以使用下列命令:
beanstalkd -l 127.0.0.1 -p 14711
除了安装beanstalkc外,一般你还需要装PyYAML。如果坚持不用PyYAML,你同样可以使用beanstalkc。 更多细节可见附录A部分。
我们需要import这个库并和服务端进行连接:
>>> import beanstalkc
>>> beanstalk = beanstalkc.Connection(host='localhost', port=14711)
如果我们不填host或者端口参数,会默认各自使用localhost和11300。同样有一个以s为单位的connect_timeout参数,用于决定socket将等待服务端多长时间来响应连接。如果值为None,那他将不会有timeout;如果不指定参数的话,默认是1s。
基本操作:
连接已经成功,我们往队列里面添加一个job:
>>> beanstalk.put('hey!')
1
或者我们reserve job
>>> job = beanstalk.reserve()
>>> job.body
'hey!'
一旦我们处理完一个job,我们就要把它标志为done。否则job一旦运行时间超过一个“time to run”周期(默认是120s)会重新进入队列。我们可以通过delete将任务标志为done:
>>> job.delete()
reserve后可能永远保持阻塞直到有job处于ready状态。如果job不是desired的,我们可以使用带timeout(以s为单位)的reserve操作,来决定我们将等待多长时间来接收这个job。如果这个reserve的timeout时间到了,它将返回None:
>>> beanstalk.reserve(timeout=0) is None
True
如果我们设置timeout为0,reserve将立即返回一个job或者None。
注意:beanstalkc需要job的body是strings,你需要将你的值转换为string。:
>>> beanstalk.put(42)
Traceback (most recent call last):
...
AssertionError: Job body must be a str instance
对于你放进body里的内容是没有限制,所以你可以使用任意二进制数据。如果你想放入一张图片,你只需要将图片转换成string。如果你想发Unicode的文本,你只需要使用unicode.encode来进行编码成一个string。
Tube的管理:
一个单独的beanstalkd server可以提供多个不同的队列,我们称之为 "tubes" in beanstalkd。通过这个命令查看所有可用的tubes:
>>> beanstalk.tubes()
['default']
一个beanstalkd客户端可以选择一个需要put job的tube,这是一个已经被客户端使用的tube,我们来查看这个客户端当前使用的tube:
>>> beanstalk.using()
'default'
除非特殊说明,默认是使用default这个tube。如果想使用一个不一样的tube:
>>> beanstalk.use('foo')
'foo'
>>> beanstalk.using()
这篇关于beanstalkc Tutorial 中文版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!