用尽可能少的代码在python中构建服务
sparts的Python项目详细描述
有很多样板和仿制面食与建筑有关 服务(或任何其他连续运行并执行任务的软件)
sparts是facebook开发的一个python库,旨在消除 尽可能多的框架代码,使得 编写新的服务,代码很少甚至没有多余的代码。
设计目标
- 能够用尽可能少的代码实现服务
- 尽可能多地支持rpc传输(thrift、http、dbus等)
- 使集成需要自定义IO循环的服务变得轻松 (扭曲、龙卷风、口齿不清等)
如何
sparts服务通常由两部分组成,核心“服务”, 以及它的“任务”。后台和脱机处理通常完成 按任务,而公用或共享功能属于服务。
服务
sparts.vtask.VService-这是任何sparts服务的核心。
只需为任何自定义服务实例逻辑子类vservice,然后 运行它的initfromcli()就完成了。
例如,myservice.py:
from sparts.vservice import VService class MyService(VService): pass MyService.initFromCLI()
现在,您可以使用-h选项运行这个文件(查看可用的 选项),或使用python myservice.py
运行它应该会发出如下输出:
DEBUG:VService:All tasks started``
按^C将发出:
^CINFO:VService:KeyboardInterrupt Received! Stopping Tasks... INFO:VService:Instance shut down gracefully
这项简单的服务本身就毫无用处。这就是任务发挥作用的地方
任务
sparts.vtask.VTask-这是所有任务的基类
任务是触发程序采取行动的因素。这个动作可以是 处理周期性事件、处理http请求、处理节俭 请求,处理队列中的项目,在事件中醒来, 做些手术,或者别的什么。
下面是一个简单的任务服务示例(需要Tornado 已安装):
from sparts.vservice import VService from sparts.tasks.tornado import TornadoHTTPTask TornadoHTTPTask.register() VService.initFromCLI()
现在运行它会发出:
> python myservice.py --http-port 8000 INFO:VService.TornadoHTTPTask:TornadoHTTPTask Server Started on 0.0.0.0 (port 8000) INFO:VService.TornadoHTTPTask:TornadoHTTPTask Server Started on :: (port 8000) DEBUG:MyService:All tasks started
如您所见,您可以卷曲web服务器:
> curl localhost:8000 Hello, world
可以对任务进行子类化以完成所有类型的任务。这个打印当前的unix 每秒时间戳:
from sparts.tasks.periodic import PeriodicTask class PrintClock(PeriodicTask): INTERVAL = 1.0 def execute(self): print time.time() PrintClock.register() from sparts.vservice import VService VService.initFromCLI()
结果是:
DEBUG:VService:All tasks started DEBUG:VService:VService Active. Awaiting graceful shutdown. 1376081805.08 1376081806.08 1376081807.08 1376081808.08 1376081809.08 1376081810.08 1376081811.08
停止
如果您有任何问题、意见、反馈、建议等,请 随时可以联系我。
- 电子邮件:ruibalp@gmail.com
- 推特:http://twitter.com/fmoo
- irc.freenode:sparts
- 脸谱网:http://fb.me/ruibalp
许可证
Sparts获得BSD许可。我们还提供额外的专利授权。