非常简单的beanstalkd客户端
pystalk的Python项目详细描述
pystalk
是一个非常简单的beanstalkd客户端。它是
与Python2和Python3兼容
这个项目最初是为beancmd创建的。你也可能对这个工具感兴趣
要求/安装
此软件与Python2.7和3.3+一起工作。
它不支持任何异步事件循环,也没有使用gevent进行测试。它的设计很简单, 同步使用
您应该可以使用pip install pystalk
从PyPI安装它。
示例用法
创造就业
#!/usr/bin/pythonimportjsonfrompystalkimportBeanstalkClientclient=BeanstalkClient('10.0.0.1',11300)client.put_job(json.dumps({"foo":"bar"}),delay=30)
这将创建一个延迟30秒的作业。注意,作业的数据必须是utf-8可编码的。
在特定管道中创造就业机会
Beanstalk有一个tube
s(即命名队列)的概念有几种方法可以将
使用Pystalk将作业放入特定的管中:
#!/usr/bin/pythonfrompystalkimportBeanstalkClientclient=BeanstalkClient('10.0.0.1',11300)# method 1, matches the upstream protocolclient.use("some_tube")client.put_job("some message")# method 2, using an external guard object like you would in C++ or Rustwithclient.using("some_tube")asinserter:inserter.put_job("some message")# method 3client.put_job_into("some_tube","some message")
消耗所有可用工作
下面的脚本将遍历所有当前就绪的作业,然后退出:
#!/usr/bin/pythonfrompystalkimportBeanstalkClientclient=BeanstalkClient('10.0.0.1',11300)forjobinclient.reserve_iter():try:execute_job(job)exceptException:client.release_job(job.job_id)raiseclient.delete_job(job.job_id)
注意,即使我们要求作业数据在put_job
方法中是可编码的utf-8,我们也不会为您解码——在python 3.5中,输出的作业数据是一个字节字符串。如果您想将输入数据取回,应该调用.decode("utf-8")
。如果您希望这种行为,请将auto_decode=True
传递给BeanstalkClient
构造函数;请注意,这可能会使您难以使用由不采用utf-8的其他系统注入的数据。
多个作业服务器
下面将从一组beanstalk服务器中保留作业,在它们之间进行相当的旋转。
#!/usr/bin/pythonfrommyappimportexecute_jobfrompystalkimportBeanstalkClient,BeanstalkTimedOutErrorhosts=('10.0.0.1','10.0.0.2')clients=dict((h,BeanstalkClient(h,11300))forhinhosts)i=0whileTrue:i+=1client=clients[hosts[i%len(hosts)]]try:job=client.reserve_job(1)exceptBeanstalkErrorase:ife.message=='TIMED_OUT':continueelse:raiseexecute_job(job)client.delete_job(job.job_id)
开发
很直截了当。在分支机构中开发,发送prs,在master上登陆。着陆前所有测试必须通过。
发布新版本
- 完成所有必要的变更
- 将
setup.py
和pystalk/__init__.py
中的版本凹凸到稳定版本(例如0.2
) - 使用更改和新版本号更新^{
} - 用新版本号更新^{
} - 提交
- 标记版本(例如
git tag -s pystalk-0.2
) - 向上推至Github
- 使用
python setup.py sdist upload
上载到pypi