用尽可能少的代码在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

停止

如果您有任何问题、意见、反馈、建议等,请 随时可以联系我。

许可证

Sparts获得BSD许可。我们还提供额外的专利授权。

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

推荐PyPI第三方库


热门话题
java如何显示因用户而异的SQLite存储数据?   转换java。sql。将映射传递给Jackon的valueToTree方法时StringNode的时间戳   从java中的列表json获取值   unicode Java字符存储在什么编码中?   java如何让Spring数据存储库中的默认方法命中缓存?   java使用readClassDescriptor()和resolveClass()来允许序列化版本控制   数组通过另一个矩阵的一部分填充矩阵   如果包含使用正则表达式的字符串,则替换父XML标记的java   java清除SharedReference中的单个变量   java将变量值从一个jsp页面传输到另一个jsp页面   java JDBC+SQLite:DriveManager不加载所需的驱动程序   相同源代码的java Kotlin构建生成不同的二进制文件   Java中的元组枚举