未知
项目描述
Taskmaster
Taskmaster是一个简单的分布式队列,专为处理大量一次性任务而设计。
我们在DISQUS构建了这个工具来处理“将此数据迁移到新架构”等频繁但罕见的工作。
为什么?
您可能会问,“为什么不使用Celery?”好吧,答案很简单,常规队列需要(不是字面上的,但如果没有它会很痛苦)将所有任务缓冲到中央位置。当您有大量任务时,这成为一个问题,尤其是当这些任务包含大量数据时。
想象一下,您有10亿个任务,每个任务重量为5k。这至少需要4TB的存储空间来存储这些任务,而收益却很小。
另一方面,Taskmaster设计为接受可恢复的迭代器,并且一次最多拉入一定数量的工作(使用标准的Python Queue)。这确保了一种一致的内存模式,可以线性扩展。
要求
要求应该由setuptools处理,但如果它们没有,您将需要以下Python包
progressbar
pyzmq (zeromq)
gevent
gevent_zeromq
关于Gevent的说明
鉴于Taskmaster既用于其迭代器任务(主任务)也用于其消费者,您的应用程序需要正确实现非阻塞的gevent兼容调用者。在大多数情况下这不会成为问题,但如果您正在使用网络,您将需要寻找兼容您的适配器的库。例如,有一个为gevent设计的psycopg2的替代版本,称为gevent-psycopg2。
用法
创建一个迭代器和回调
# taskmaster/example.py def get_jobs(last=0): # last would be sent if state was resumed # from a previous run for i in xrange(last, 100000000): # jobs yielded must be serializeable with pickle yield i def handle_job(i): # this **must** be idempotent, as resuming the process may execute a job # that had already been run print "Got %r!" % i
启动主任务
$ tm-master taskmaster.example
您还可以为主任务传递关键字参数
$ tm-master taskmaster.example argument=value
启动从任务
$ tm-slave taskmaster.example
或者创建8个奴隶(每个都包含一个线程池)
$ tm-spawn taskmaster.example 8
不喜欢主/从的魔法函数发现?指定您自己的目标
$ tm-master taskmaster.example:get_jobs $ tm-slave taskmaster.example:handle_job
也许您只需要在同一服务器上运行东西?
$ tm-run taskmaster/example.py 8
项目详情
关闭
taskmaster-0.8.2.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 3aadb62af79bef317f6edc16b13d116a71c48835769530772676501042746aaa |
|
MD5 | 75896f73ece9fc3f0028bec574df91e3 |
|
BLAKE2b-256 | ff56e3a3cfcd2e4ad48f6af3c63ec9b0c1417d0ea7c3db247f7e1bc96aba806a |