跳转到主要内容

完全内存作业队列,具有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 提供。

Latest PyPI version build_status Latest PyPI version

[mjdorma+restq@gmail.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

问题

restq 的源代码托管在 GitHub 上。请使用 GitHub 的问题系统提交错误报告。

变更日志

版本 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 的贡献

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

restq-0.1.2.tar.gz (21.8 kB 查看散列

上传时间

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面