一个简单、灵活的调度程序,用于分布式工作池。

redbike的Python项目详细描述


#redbike

是一个简单、灵活的调度程序,适用于分布式工作人员池。


redbike是一个有用的构建块,具有故意限制的功能。
它很容易安排和分发工作,但是您喜欢。


redbike可以从python包索引中获得:

``bash
$pip install redbike
`````
`high level

redbike有一个简单的设计,以redis中的一些数据结构为中心。

*作业计划的注册表(a[hash](http://redis.io/topics/data types/hash))
*作业状态的注册表(另一个[hash](http://redis.io/topics/data types/hash))格式:"event:timestamp"
*计划工作的时间线(a[sorted集](http://redis.io/topics/data types排序集)按下一次运行的时间戳评分)
*任何数量的作业队列([列表](http://redis.io/topics/data types列表))
*将在时间线上到期的工作排队的单个调度程序进程
*过期键以跟踪已开始运行但尚未返回或超时的作业。
*任意数量的工作进程

还需要知道如何连接到redis。默认情况下,它会出现在
`.redbike.conf`中,但您可以指定任何文件。


连接信息可以在`[redbike redis]`节中找到,并且
会镜像py redis'`strictredis`类的参数。剩下的
设置可以在`[redbike]`stanza中找到。
配置文件中的其他信息被忽略,因此只要共享配置中有类似的内容,就可以使用它:

``ini
[redbike]
前缀:myapp
worker:somepackage.somemodule:myworkerclass('initstring')
time file:/var/log/myapp.redbike.time在python中:





``python
python
bike=redbike(myworkerclasclass('initstring'),
prefix='myapp',
timefile='/var/log/myapp.redbike.redbike.timefile')
```````

`````````
````````
````````

````````````

>>````````````````````````````要运行的时间戳redbike中的作业只需输入作业ID和计划。日程表可以是iCal[rrule]格式(http://www.kanzaki.com/docs/iCal/rrule.html)
或以下特殊值之一:

*`now`-立即运行一次
*`at:timestamp`-在指定时间运行一次
*`continue`-立即重新排队
*`stop`-不再运行

错误的时间文件(见下文)
,调度每个作业的时间(或是否)将基于此值。


set操作不会等待调度程序,而是将作业直接输入到时间线或工作队列中
合适的位置。


python中:

``python
``bike.set('job1:a','now')
````

dispatch而时间文件

``bash
$redbike dispatch[<;worker>;][--schedules=<;schedulescsv>;[--after=<;timestamp>;]]
````



dispatcher会使用
current timesta更新时间文件的内容当它运行的时候。当启动调度或设置
计划时,时间文件中的时间用于确定
作业下次运行的时间和时间。如果未提供`--after`
参数且找不到时间文件,则默认值为当前时间



还可以提供作业ID的CSV、计划对。这些计划
将在发货开始前设置。

r的"work()"方法。
如果引发"stopwork",则作业的计划设置为"stop"。如果引发"unset job"
,则该作业将被取消设置(从轮换中移除)。如果引发任何其他异常,则会记录该异常,并且不会重新安排作业。如果作业花费的时间超过超时时间,则也不会重新安排。否则,将检查作业的计划,如果合适,它将返回队列或时间线。


只需重写其"work()"方法。

`` python
mymodule.py
来自redbike import roundrobin,stop work

class worker(roundrobin):

def work(self,jobid):
should_stop=do_something(jobid)
if should_stop:
提高stopwork("不要再运行此作业!")
``


此类根据最后一个`:``后面的
作业ID部分选择工作队列。它由一个冒号
分隔的字符串初始化,该字符串指定要工作的队列以及工作队列的顺序。例如,如果您想将作业
放入两个队列,并使队列"a"的工作频率是队列"b"的两倍,那么这就可以做到:

``bash
$redbike set job1:a continue
$redbike set job2:b continue
$redbike work mymodule:work("a:b")
````
`backoff

有"继续"计划的员工有时可能希望引入退避。worker的"work()"方法可以返回backoff seconds的整数值,并且在指定的backoff结束后,作业
将被输入到要排队等待
再次工作的时间线中。


ey
具有过期时间和唯一值以标记该场合。当
工作进程正常完成时,它将删除该密钥并重新安排日程。
如果该密钥不再存在或该值已更改,则认为它已超时,将不会重新安排日程。此行为
防止工作进程执行在工作
作业时可能发生的计划更改(通常是由"set()"和"unset()"所做的更改)。


只需定义一个timeout(self,queue\u name),并返回一个整数
作为超时值(以秒为单位),或者返回"none",即可使用默认超时值。
默认超时值为10秒。您还可以在配置节中用"默认超时"设置覆盖


cher和worker进程监视redis中的控制键
设置为"halt",并在完成当前任务后立即停止。

如何处理这个问题取决于你对同一个计划的事情的看法,比如当一个工作失败或烧掉时,你会有两次工作或者错过。也就是说,有几个命令可以帮助


/>
输出为csv格式。

redbike作业的整个生命周期都设置状态。


*tml-输入时间线
*enq-输入工作队列
*bad-由于坏的rrule而未能计划
*wrk-由工人拾取Rked raise stopwork
*模具工引发意外异常

以转储所有作业的计划:

`` bash
$redbike sschedules
jobid,schedule
jobid,schedule

````

/>"status":"enq:1381720578",
"next-run":空,
"schedule":"continue"
}
````

如果它已经在运行,则无法完成,否则
将被删除且无法工作。

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

推荐PyPI第三方库


热门话题
在java代码中实现两个侦听器时发生swing错误   Lambda是否完全取消了Java8中匿名内部类的使用?   swing OpenSuse 12.3+Java双显示   POM中的java错误。xml文件,即使在清理{users}/之后。m2/用于*上次更新文件的存储库   JavaEDT特定的方法和其他东西   java如何使用GridLayout设置组件大小?有更好的办法吗?   java在itext7中生成二维码时,如何调整点的大小?   java如何在多行上显示文本并右对齐?   java在WebSphereCluString环境中分离Log4j日志   JAVA从文件读取,返回BigInteger值   当使用rxjava2进行排列时,使用javamockito。重试()   在java fasterxml中创建Xml   使用64位整数进行模运算的64位整数的java快速乘法,无溢出   java静态变量保留以前发布的值   datastax enterprise SSTable loader流式处理无法提供java。木卫一。IOException:对等方重置连接   java匹配的通配符是严格的,但找不到元素“mvc:annotationdriven”的声明。标准包装。可抛出   java无法在浏览器上下载文件文档?