完全内存作业队列,具有RESTful接口。
项目描述
为什么选择restq?
我们想要一个简单、平台无关的解决方案来管理我们在分析平台之间批处理执行的协调和分配。restq解决了我们的需求,创建了一个系统,它可以
根据类别或类型(领域)隔离执行,
管理作业执行的优先级(有序队列),
根据排序列表、检查出和过期时间(几乎是FIFO)从领域中出队作业。
基于任意标签索引的作业状态。
上述概念无需配置。
restq中包含的内容
上述执行管理系统的实现。
一个RESTful Web API,可以完全控制执行管理系统。
一个无缝接口RESTful Web API的Python客户端。
默认配置可通过环境变量或 /etc/restq.conf, ~/.restq.conf 进行配置
通过shell中的条目点 'restq' 可访问的命令行界面。CLI使启动restq服务器变得简单。它还实现了一组命令,允许用户将命令排队到队列中。这使得在服务器池中部署计划执行作业变得极其简单。
有关此restq的更多技巧/窍门,请随时在github restq/issues 页面发问。
项目托管由 github.com 提供。
安装和运行
只需运行以下命令
> python setup.py install
或 PyPi
> pip install restq
使用 restq 编码
如何使用的一个简单示例
> restq web & > ipython In [1]: from restq import Realms In [2]: realms = Realms() In [3]: realms.test. realms.test.add realms.test.bulk_add realms.test.bulk_flush realms.test.get_job realms.test.get_tag_status realms.test.get_tagged_jobs realms.test.name realms.test.pull realms.test.remove_job realms.test.remove_tagged_jobs realms.test.request realms.test.requester realms.test.set_default_lease_time realms.test.set_queue_lease_time realms.test.status In [3]: realms.test.add('job 1', 0, 'do the dishes', tags=['house work']) In [4]: realms.test.add('job 2', 0, 'cut the grass', tags=['house work']) In [5]: realms.test.add('job 3', 1, 'fix bugs in restq', tags=['devel']) In [6]: realms.test.add('job 4', 3, 'document restq', tags=['devel']) In [7]: realms.test.add('job 5', 0, 'go for walk', tags=['sport']) In [8]: realms.test.status Out[8]: {u'queues': {u'0': 4, u'1': 1, u'2': 1, u'3': 1}, u'total_jobs': 7, u'total_tags': 3} In [9]: jobs = realms.test.pull(count=7) In [10]: jobs Out[10]: {u'job 1': [0, u'do the dishes'], u'job 2': [0, u'cut the grass'], u'job 3': [1, u'fix bugs in restq'], u'job 4': [3, u'document restq'], u'job 5': [0, u'go for walk'], u'job 6': [0, u'go for walk with dog'], u'job 7': [2, u'go for bike ride']} In [11]: realms.test.get_tag_status('house work') Out[11]: {u'count': 2} In [12]: realms.test.get_tagged_jobs('devel') Out[12]: {u'job 3': {u'data': u'fix bugs in restq', u'queues': [[1, 82.17003393173218]], u'tags': [u'devel']}, u'job 4': {u'data': u'document restq', u'queues': [[3, 82.16989994049072]], u'tags': [u'devel']}}
使用 restq 的命令行界面
将参数添加到默认区域
将参数“ls -lah”添加到默认区域。
> restq add "ls -lah"
如果我们想引用一组命令,我们可以标记一个命令(即使它已经存在)。
用标签“work”标记参数“ls -lah”。
> restq add --tags=work "ls -lah"
将另一个参数添加到区域中,但这次我们将用 work 和 fun 标记它。
> restq add --tags=work,fun pwd
查看区域的状态。
> restq status Status of realm default: Contains 2 tags with 2 jobs Defined queues: 0
是时候将 pwd 添加到另一个队列中。
> restq add --queue=1 pwd > > restq status Status of realm default: Contains 2 tags with 2 jobs Defined queues: 1, 0
拉取(或检出)执行参数
从上一个示例继续。
从默认区域中拉取并执行最多两个参数。在默认超时后,这些参数将再次可用于检出。
> while read i; do eval "$i"; done < <(restq pull --count=2) drwxr-xr-x 9 mick mick 4.0K Jul 18 08:01 . drwxrwxr-x 9 mick mick 4.0K Jul 14 03:07 .. drwxrwxr-x 3 mick mick 4.0K Jul 12 00:04 docs -rw-rw-r-- 1 mick mick 72 Jul 12 00:04 MANIFEST.in -rw-rw-r-- 1 mick mick 3.7K Jul 12 00:04 README.rst drwxrwxr-x 2 mick mick 4.0K Jul 17 23:13 restq -rw-rw-r-- 1 mick mick 2.1K Jul 17 19:57 setup.py drwxrwxr-x 2 mick mick 4.0K Jul 12 00:04 tests -rw-rw-r-- 1 mick mick 321 Jul 12 00:04 .travis.yml /home/mick/work/restq
参数 pwd 被放入两个队列。下一次拉取将看到 pwd 从队列 1 中出队。
> restq pull pwd
让我们检查自检出以来 pwd 参数的状态。这显示了特定参数所在的队列、它具有的标签以及它上次检出(拉取)的时间。
> restq status arg pwd Status of argument pwd: Tagged with: work queue id | (s) since dequeue 1 | 35.22 0 | 454.49
是时候从我们的区域中删除 pwd 了……我们用完这个参数,不再需要它来执行。您会注意到 fun 标签不再存在于区域中,因为它仅附加到 pwd 上。
> restq remove arg pwd >
参数出队的默认租用时间为 600 秒。在此过期时间后,“ls -lah”将再次可用于出队。
> restq pull ls -lah
如何分发用于执行的 shell 脚本
将“work.sh”脚本添加到默认区域。
> restq add --file=work.sh "chmod +x work.sh; ./work.sh"
现在当使用 restq 命令行界面进行出队操作时,将使用从原始“work.sh”中读取的数据写入路径“./work.sh”,并将参数写入 stdout。
> eval "`restq pull`"
以下是一个示例脚本,它可以在多台机器上部署,以连续拉取并执行已添加到默认区域的作业。
> while [ 1 ]; do > while read i; do eval "$i"; done < <(restq pull); > sleep 1; > done
问题
变更日志
版本 0.1.2(2013 年 8 月 26 日)
批量添加和删除
版本 0.1.0(2013 年 7 月 18 日)
实现了命令行控制。
区域现在使用 yaml -> 与先前版本不兼容。
版本 0.0.4(2013 年 6 月 9 日)
配置和命令行外壳实现
版本 0.0.3(2013 年 6 月 6 日)
批量发布和稳定的错误处理
版本 0.0.1(2013 年 4 月 10 日)
预生命
贡献
对 restq 的贡献