apache mesos的可扩展python框架
satyr的Python项目详细描述
[![构建状态](http://drone.lensa.com:8000/api/badges/lensacom/satyr/status.svg)(http://drone.lensa.com:8000/lensacom/satyr)
[![加入聊天网站https://gitter.im/lensacom/satyr](https://badges.gitter.im/lensacom/satyr.svg)(https://gitter.im/lensacom/satyr?utm_source=badge&utm_medium=badge&utm_campaign=pr badge&utm_content=badge
![satyr](https://s3.amazonaws.com/lensa rnd misc/satyr2.png)
分布式snake charmer的目的是简化编写mesos的python框架的过程。SATYR提供了多个组件和接口,以覆盖各种
复杂需求级别。
BR/>显著特征
BR/> -舒适的Python接口代替C++语法BR/> -神奇的BooTFF包装器,方便地扩展自定义功能BR/>多重消息。用于优化调度的ted bin packing启发式算法
-易于扩展queuescheduler实现
-python多处理。池接口
\install
`pip install satyr`或使用[lensa/satyr](https://hub.docker.com/r/lensa/satyr/)docker image
要求:
-mesos.interface(可通过pip安装)
-mesos.native(二进制,egg可从mesosphere.io下载)
(https://docs.python.org/3/library/concurrent.futures.html)
但在mesos集群上运行进程(并发)。
``python
从satyr.apis.futures导入mesospoolexecutor
从satyr.proxies.messages导入cpu,mem
任务:
def mul(a,b):
return a*b
future=executor.submit(mul,args=[3,5])
assert future.result(timeout=5)==3
resources=[cpu(0.1),mem(128)]
assert list(it)==[i**2 for i in range(10)]
```
打印功能
来自satyr.apis。多处理导入池
pool(name='satyr-pool')作为池:
def mul(a,b):
return a*b
res2=池。应用异步(mul,[2,3])
pool.wait()
print(res1.get())
print(res2.get())
````
`` python
from uuu future_uuu import print_u function
from satyr.scheduler import queuescheduler,running
from satyr.messages import python task
from satyr.proxies.messages import disk,mem,cpu
scheduler=queuescheduler()
task=pythontask(fn=sum,args=[范围(10),name='satyr-task',
resources=[CPU(0.1),mem(128),disk(512)]
with running(scheduler,name='satyr-scheduler'):
res=scheduler.submit(task)return asyncresult
print(res.get(timeout=30))
`````
让您自己的调度器构建在queuescheduler上,或者为了更复杂的
需要,有一个[scheduler](satyr/interface.py)接口,您可以使用它从头开始创建一个。(但是在这种情况下,您必须实现[queuescheduler](satyr/scheduler.py)中已有的一些功能satyr.scheduler导入queuescheduler,从satyr运行
。消息从satyr.proxies导入pythontask
。消息导入磁盘、mem、cpu
class customscheduler(queuescheduler):
调度程序接口。
它们只是为基本的
mesos.interface函数命名的更方便的方法,但这就是如何以简单的方式向框架中添加一些
自定义逻辑的方法。
"
logging.info(
"statuss收到任务{}的更新。格式(status.task_id))
super(customscheduler,self)。on_update(driver,status)
scheduler=customscheduler()
task=pythontask(fn=sum,args=[range(9)",name='satyr-task',
resources=[cpu(0.1),mem(128),disk(512)]
运行(scheduler,name='satyr-custom-scheduler'):
res=scheduler.submit(task)
print(res.get(timeout=60))
````
我给你一个
帮助手与类似的报价和taskinfo(基本的算术运算符
也超载)。
`` python
从satyr.interface import scheduler
从satyr.proxies.messages import offer,taskinfo
class customscheduler(scheduler):
。…
def on_offers(self,driver,offers):
…
task=self.get_next_task()
如果task<;offer:
task.slave_id=offer.slave_id
driver.launch(offer,[task])
拒绝未使用d提供或启动空任务列表
…
```
-最大休息时间
-最佳拟合时间
-最佳拟合时间减少
请参见[binpack.py](satyr/binpack.py)。
[使用apache mesos的异构资源调度](http://events.linuxfound)中的
[netflix/fenzo](https://github.com/netflix/fenzo)证明了使用bin打包的好处。ation.org/sites/events/files/slides/prezo-at-mesoscon2015-final.pdf)内置任务类型
另外,如果您想在docker
容器中运行任务,您可以为任务提供一些附加信息。
``python
from satyr.proxies.messages import taskinfo,commandinfo
task=taskinfo(name='command-task',command=commandinfo(value='echo 100')
task.ccontainer.type='docker'
task.container.docker.image='lensacom/satyr:latest'
````
\python
方法和参数发送到匹配的mesos从机执行。
请注意,python任务默认在[lensa/satyr](https://hub.docker.com/r/lensa/satyr/)docker容器中运行。
``python
端口python task
g子代。
如果您沿着前一条路走下去,您很可能需要在代码中处理
protobuf;不用担心,我们有一些神奇的包装器供您提供
可定制的消息。
``python
fromnt_function
来自satyr.proxies.messages import taskinfo
来自mesos.interface import mesos_pb2
class customtask(taskinfo):
labels=[mesos_pb2.label(key='custom')])
@property
def uppercase_task_name():
return self.name.upper()
def on_update(self,status):
logging.info('custom task has received a status update')
def custom_method(self):
print("任意内容")
```
unc(self,driver,task):
def run_task():
driver.update(task.status('task_running')
logging.info('sent task_running status update')
try:
logging.info('executing task…')
result=task()
异常除外,例如e:
日志记录。异常("任务错误")
驱动程序更新(task.status("task_failed",message=e.message))
日志记录。info("sent task_running status update")
其他:
驱动程序更新(task.status('任务完成,数据=结果])
logging.info('已发送任务完成状态更新')
thread=threading.thread(target=run_task)
thread.start()
`````
-适当的文档
-python futures api
-更详细的示例
-以及贡献指南
-dask.mesos backend
!
[![加入聊天网站https://gitter.im/lensacom/satyr](https://badges.gitter.im/lensacom/satyr.svg)(https://gitter.im/lensacom/satyr?utm_source=badge&utm_medium=badge&utm_campaign=pr badge&utm_content=badge
![satyr](https://s3.amazonaws.com/lensa rnd misc/satyr2.png)
分布式snake charmer的目的是简化编写mesos的python框架的过程。SATYR提供了多个组件和接口,以覆盖各种
复杂需求级别。
BR/>显著特征
BR/> -舒适的Python接口代替C++语法BR/> -神奇的BooTFF包装器,方便地扩展自定义功能BR/>多重消息。用于优化调度的ted bin packing启发式算法
-易于扩展queuescheduler实现
-python多处理。池接口
\install
`pip install satyr`或使用[lensa/satyr](https://hub.docker.com/r/lensa/satyr/)docker image
要求:
-mesos.interface(可通过pip安装)
-mesos.native(二进制,egg可从mesosphere.io下载)
(https://docs.python.org/3/library/concurrent.futures.html)
但在mesos集群上运行进程(并发)。
``python
从satyr.apis.futures导入mesospoolexecutor
从satyr.proxies.messages导入cpu,mem
任务:
def mul(a,b):
return a*b
future=executor.submit(mul,args=[3,5])
assert future.result(timeout=5)==3
assert list(it)==[i**2 for i in range(10)]
```
打印功能
来自satyr.apis。多处理导入池
pool(name='satyr-pool')作为池:
def mul(a,b):
return a*b
pool.wait()
print(res1.get())
print(res2.get())
````
`` python
from uuu future_uuu import print_u function
from satyr.scheduler import queuescheduler,running
from satyr.messages import python task
from satyr.proxies.messages import disk,mem,cpu
scheduler=queuescheduler()
task=pythontask(fn=sum,args=[范围(10),name='satyr-task',
resources=[CPU(0.1),mem(128),disk(512)]
with running(scheduler,name='satyr-scheduler'):
res=scheduler.submit(task)return asyncresult
print(res.get(timeout=30))
`````
让您自己的调度器构建在queuescheduler上,或者为了更复杂的
需要,有一个[scheduler](satyr/interface.py)接口,您可以使用它从头开始创建一个。(但是在这种情况下,您必须实现[queuescheduler](satyr/scheduler.py)中已有的一些功能satyr.scheduler导入queuescheduler,从satyr运行
。消息从satyr.proxies导入pythontask
。消息导入磁盘、mem、cpu
class customscheduler(queuescheduler):
调度程序接口。
它们只是为基本的
mesos.interface函数命名的更方便的方法,但这就是如何以简单的方式向框架中添加一些
自定义逻辑的方法。
"
logging.info(
"statuss收到任务{}的更新。格式(status.task_id))
super(customscheduler,self)。on_update(driver,status)
scheduler=customscheduler()
task=pythontask(fn=sum,args=[range(9)",name='satyr-task',
resources=[cpu(0.1),mem(128),disk(512)]
运行(scheduler,name='satyr-custom-scheduler'):
res=scheduler.submit(task)
print(res.get(timeout=60))
````
我给你一个
帮助手与类似的报价和taskinfo(基本的算术运算符
也超载)。
`` python
从satyr.interface import scheduler
从satyr.proxies.messages import offer,taskinfo
class customscheduler(scheduler):
。…
def on_offers(self,driver,offers):
…
task=self.get_next_task()
如果task<;offer:
task.slave_id=offer.slave_id
driver.launch(offer,[task])
拒绝未使用d提供或启动空任务列表
…
```
-最大休息时间
-最佳拟合时间
-最佳拟合时间减少
请参见[binpack.py](satyr/binpack.py)。
[使用apache mesos的异构资源调度](http://events.linuxfound)中的
[netflix/fenzo](https://github.com/netflix/fenzo)证明了使用bin打包的好处。ation.org/sites/events/files/slides/prezo-at-mesoscon2015-final.pdf)内置任务类型
另外,如果您想在docker
容器中运行任务,您可以为任务提供一些附加信息。
``python
from satyr.proxies.messages import taskinfo,commandinfo
task=taskinfo(name='command-task',command=commandinfo(value='echo 100')
task.ccontainer.type='docker'
task.container.docker.image='lensacom/satyr:latest'
````
\python
请注意,python任务默认在[lensa/satyr](https://hub.docker.com/r/lensa/satyr/)docker容器中运行。
``python
端口python task
g子代。
如果您沿着前一条路走下去,您很可能需要在代码中处理
protobuf;不用担心,我们有一些神奇的包装器供您提供
可定制的消息。
``python
fromnt_function
来自satyr.proxies.messages import taskinfo
来自mesos.interface import mesos_pb2
class customtask(taskinfo):
labels=[mesos_pb2.label(key='custom')])
@property
def uppercase_task_name():
return self.name.upper()
def on_update(self,status):
logging.info('custom task has received a status update')
def custom_method(self):
print("任意内容")
```
unc(self,driver,task):
def run_task():
driver.update(task.status('task_running')
logging.info('sent task_running status update')
try:
logging.info('executing task…')
result=task()
异常除外,例如e:
日志记录。异常("任务错误")
驱动程序更新(task.status("task_failed",message=e.message))
日志记录。info("sent task_running status update")
其他:
驱动程序更新(task.status('任务完成,数据=结果])
logging.info('已发送任务完成状态更新')
thread=threading.thread(target=run_task)
thread.start()
`````
-适当的文档
-python futures api
-更详细的示例
-以及贡献指南
-dask.mesos backend
!