跳转到主要内容

dirt 是一个用于构建服务导向架构中 Python 应用程序的全面框架

项目描述

dirt 提供了构建长运行 Python 应用程序(“服务”)所需的全部工具,这些应用程序可以通过 RPC 进行通信。

具体来说,它提供

  • 用于通过 RPC 暴露方法的工具(使用 dirt 自定义协议或 ZeroRPC,包括诸如 iPython 选项卡完成之类的便利功能)。

  • 用于创建长运行应用程序的框架,并通过 RPC 暴露其方法。

  • 用于在一个终端中运行多个应用程序的工具,无论是用于开发还是生产。

  • 定义应用程序的简单语法(目前最好支持 Django-style settings.py 文件,但 .ini 也容易支持)。

一个应用程序可以像这样简单

$ cat app.py
import gevent
import logging

from dirt import DirtApp, runloop

log = logging.getLogger(__name__)

class PingAPI(object):
    def ping(self):
        return "pong"

class PingApp(DirtApp):
    def get_api(self, edge, call):
        return PingAPI()

class LongRunningApp(DirtApp):
    @runloop(log)
    def serve(self):
        ping_app = self.settings.get_api("ping")
        while True:
            result = ping_app.ping()
            log.info("ping: %r", result)
            gevent.sleep(1)

$ cat settings.py
from dirt import logging_default
USE_RELOADER = False
DIRT_APP_PIDFILE = "/tmp/dirt-example-{app_name}.pid"
LOGGING = logging_default("/tmp/dirt-example-{app_name}.log", root_level="INFO")

class PING:
    app_class = "app.PingApp"
    bind_url = "zrpc+tcp://127.0.0.1:9990"
    remote_url = bind_url

class LONG_RUNNING:
    app_class = "app.LongRunningApp"

$ ./run ping long_running
23:20:21.289 ping INFO dirt.app: binding to zrpc+tcp://127.0.0.1:9990...
23:20:21.477 long_running INFO app: ping: 'pong'
23:20:22.380 long_running INFO app: ping: 'pong'

一些笔记

  • dirt 与其他工具兼容良好,可以轻松集成到现有项目中。请参阅 example_project/ 目录,其中包含使用 dirt 的 Django 项目。

  • dirt 依赖于 gevent==1.0。理论上,应用程序可以使用操作系统线程,但这尚未经过测试。

开发状态

dirt 已在 Luminautics 的生产环境中使用,并且在过去六个月内非常稳定。

话虽如此,可能存在一些未经文档化的假设,可能会影响其他用户,因此在您的生产环境中信任它之前,应进行一些测试。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

dirt-0.2.1-unstable.tar.gz (43.7 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面