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

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

推荐PyPI第三方库


热门话题
java如何从数组中打印int值?   prepared语句Java中奇怪的异常PreparedStatement:参数索引超出范围   封装如何在OOP Java中为主方法编码?   java某些手机显示快捷方式徽章需要什么权限?   java TextView不会随OnItemSelectedListener更改   java注释处理器不会自动触发吗?   java Spring JPA如何计算外键数   c#对于这个简单的OOAD问题,哪种设计最优雅?   java如何处理while循环中的异常?   Android Studio错误:进程'command'/home/draven/Downloads/安卓studio/jre/bin/java''结束,退出值为非零2   在使用Payara服务器的Vaadin应用程序中导航到根目录时,java将丢失上下文根目录   使用contentType application/json而不是application/jsonpatch+json的java修补程序   带有tomcat的java HAproxy连接不足   Java:在应用过滤器后创建一个简单的通用方法进行计数   java如何使用多态性创建一个实例化对象的方法,然后用它们高效地填充ArrayList?