用于cli和python的beanstalkd实用程序
azuki的Python项目详细描述
使用beanstalk很容易实现异步执行。
django应用程序,azuki允许您完成所有操作。
通过命令行可以方便地检查和修改beanstalk队列
。
```
$azuki tubes[-v]
$azuki stats
$azuki stats default
$azuki stats 123
```
stats命令将提供基本统计信息,例如
连接、作业的总数和命令。如果指定一个tube,例如"default",则
将看到该tube的统计信息;如果指定作业id,则
将看到其详细信息和内容。
tubes命令显示一个tube列表。添加-v参数也可以获得所有队列的所有进程和作业的摘要。
上面的三个命令可以查看第一个延迟的、就绪的或埋在管道中的作业。如果您也使用"--ask"选项,系统将询问您是否要删除、埋葬或踢出作业。作者喜欢"azuki
peek burbed--ask`清理失败的作业。
给定其ID号。
把它们从掩埋的地方移到准备好的地方。
```
azuki bury 123
azuki kick 123
```
使用上面的命令。
queueing shell命令最初编写azuki是为了方便并行shell作业。当然,如果您只想
并行化,可以使用[gnu
parallel](http://www.gnu.org/software/parallel/),但我还需要能够在应用程序运行时调整并行性、暂停所有操作并添加作业。简而言之,我需要
来使用队列,beanstalk是我选择的队列。
最初的任务是以自动化但可控的方式更新数千台HP服务器的iLO固件。要做到这一点,首先要将作业放入试管中:
```
对于iLO,输入$(<;ilos.txt);do
echo$iLO azuki put--ttr 600 iLO firmware
done
```
这将读取一个项目列表,并在TTR为600的iLO firmware
试管中逐个安排它们。您还可以使用"-delay`
参数指定延迟。
STDIN。` do_firmware_update`希望在命令行中执行此操作,因此使用'xargs'。现在,我们只需使用screen并行地运行任意数量的"azuki foreach"实例就可以了。
foreach命令查看它运行的命令的exitcode。如果
exitcode为0,则认为作业成功并被删除。如果exitcode不为零,则作业将被掩埋。
在工作日结束时,我想暂停升级,但在固件升级过程中使用
`ctrl-c'不是一个好主意。阿祖基去营救!
"azuki暂停8640000 iLO固件"
这将暂停试管100天。已经运行的固件更新将
完成,但不会安排新的固件更新。10分钟后全部暂停。
要取消暂停试管,只需再次暂停,但暂停时间为0秒。
python api
——
使用beanstalkc
库,beanstalkd管在python中已经相当容易使用了。但是相当容易还不够容易,所以azuki可以让你更容易。你可以简单地修饰你的函数使它们异步。
example.py:
````
from azuki import beanstalk
@beanstalk('example-tube')
def hello(who):
print"hello,%如果您现在运行python main.py,您会注意到它不会输出任何内容。相反,它将参数序列化为"hello",并将它们安排为"example tube"管中的作业。
若要处理排队的作业,请运行"azuki daemon example tube"。这将从tube中获取
项,导入"example"模块并真正调用"hello"函数
。
执行作业时,可以引发"azuki.reschedule"异常。
````
重新调度
@beanstalk('example-tube')
def process(task):
如果没有准备好(task):
raise reschedule(120)
执行task(task)
````
django api
----
在beanstalk队列中调度事物的缺点,是否必须序列化
函数调用的参数。azuki使用json序列化,因此任何不可json序列化的
都不能用作参数。
这意味着,例如,排队邮件而不是直接发送邮件可以工作:
models.py:
`````
来自django.contrib.auth import user
来自django.core.mail import send嫒mail
来自azuki import beanstalk
类邮件(models.model):
收件人=models.foreignkey(用户)
subject=models.charfield("subject",最大长度=128)
text=models.textfield("消息文本")
@beanstalk('send-mail')
def send(self):
发送邮件(self.subject,self.text,'webmaster@localhost',[self.recipient])
```
您可以再次使用"azuki daemon"来处理
这个管道并实际发送邮件,甚至可能是在另外一台机器上一起发送。
author
----
(c)2014,dennis kaarsemaker<;dennis@kaarsemaker.net>;这个程序是一个免费软件:你可以根据GNU通用公共许可的条款,重新发布它和/或修改它,它是由自由软件基金会出版的,或者是许可证的版本3,或者是在以后的版本中(你可以选择)。希望它是有用的,
但没有任何保证;甚至没有
适销性或特定用途适用性的暗示保证。有关详细信息,请参阅gnu通用公共许可证。
如果没有,请参见http://www.gnu.org/licenses/>;
django应用程序,azuki允许您完成所有操作。
通过命令行可以方便地检查和修改beanstalk队列
。
```
$azuki tubes[-v]
$azuki stats
$azuki stats default
$azuki stats 123
```
stats命令将提供基本统计信息,例如
连接、作业的总数和命令。如果指定一个tube,例如"default",则
将看到该tube的统计信息;如果指定作业id,则
将看到其详细信息和内容。
tubes命令显示一个tube列表。添加-v参数也可以获得所有队列的所有进程和作业的摘要。
上面的三个命令可以查看第一个延迟的、就绪的或埋在管道中的作业。如果您也使用"--ask"选项,系统将询问您是否要删除、埋葬或踢出作业。作者喜欢"azuki
peek burbed--ask`清理失败的作业。
给定其ID号。
把它们从掩埋的地方移到准备好的地方。
```
azuki bury 123
azuki kick 123
```
使用上面的命令。
queueing shell命令最初编写azuki是为了方便并行shell作业。当然,如果您只想
并行化,可以使用[gnu
parallel](http://www.gnu.org/software/parallel/),但我还需要能够在应用程序运行时调整并行性、暂停所有操作并添加作业。简而言之,我需要
来使用队列,beanstalk是我选择的队列。
最初的任务是以自动化但可控的方式更新数千台HP服务器的iLO固件。要做到这一点,首先要将作业放入试管中:
```
对于iLO,输入$(<;ilos.txt);do
echo$iLO azuki put--ttr 600 iLO firmware
done
```
这将读取一个项目列表,并在TTR为600的iLO firmware
试管中逐个安排它们。您还可以使用"-delay`
参数指定延迟。
STDIN。` do_firmware_update`希望在命令行中执行此操作,因此使用'xargs'。现在,我们只需使用screen并行地运行任意数量的"azuki foreach"实例就可以了。
foreach命令查看它运行的命令的exitcode。如果
exitcode为0,则认为作业成功并被删除。如果exitcode不为零,则作业将被掩埋。
在工作日结束时,我想暂停升级,但在固件升级过程中使用
`ctrl-c'不是一个好主意。阿祖基去营救!
"azuki暂停8640000 iLO固件"
这将暂停试管100天。已经运行的固件更新将
完成,但不会安排新的固件更新。10分钟后全部暂停。
要取消暂停试管,只需再次暂停,但暂停时间为0秒。
python api
——
使用beanstalkc
库,beanstalkd管在python中已经相当容易使用了。但是相当容易还不够容易,所以azuki可以让你更容易。你可以简单地修饰你的函数使它们异步。
example.py:
````
from azuki import beanstalk
@beanstalk('example-tube')
def hello(who):
print"hello,%如果您现在运行python main.py,您会注意到它不会输出任何内容。相反,它将参数序列化为"hello",并将它们安排为"example tube"管中的作业。
若要处理排队的作业,请运行"azuki daemon example tube"。这将从tube中获取
项,导入"example"模块并真正调用"hello"函数
。
执行作业时,可以引发"azuki.reschedule"异常。
````
重新调度
@beanstalk('example-tube')
def process(task):
如果没有准备好(task):
raise reschedule(120)
执行task(task)
````
django api
----
在beanstalk队列中调度事物的缺点,是否必须序列化
函数调用的参数。azuki使用json序列化,因此任何不可json序列化的
都不能用作参数。
这意味着,例如,排队邮件而不是直接发送邮件可以工作:
models.py:
`````
来自django.contrib.auth import user
来自django.core.mail import send嫒mail
来自azuki import beanstalk
类邮件(models.model):
收件人=models.foreignkey(用户)
subject=models.charfield("subject",最大长度=128)
text=models.textfield("消息文本")
@beanstalk('send-mail')
def send(self):
发送邮件(self.subject,self.text,'webmaster@localhost',[self.recipient])
```
您可以再次使用"azuki daemon"来处理
这个管道并实际发送邮件,甚至可能是在另外一台机器上一起发送。
author
----
(c)2014,dennis kaarsemaker<;dennis@kaarsemaker.net>;这个程序是一个免费软件:你可以根据GNU通用公共许可的条款,重新发布它和/或修改它,它是由自由软件基金会出版的,或者是许可证的版本3,或者是在以后的版本中(你可以选择)。希望它是有用的,
但没有任何保证;甚至没有
适销性或特定用途适用性的暗示保证。有关详细信息,请参阅gnu通用公共许可证。
如果没有,请参见http://www.gnu.org/licenses/>;