用于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/>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava