dirt是构建python应用程序的综合框架,python应用程序是面向服务架构的一部分
dirt的Python项目详细描述
dirt提供构建长时间运行的python所需的所有工具 可以通过rpc进行通信的应用程序(“服务”)。
具体来说,它提供:
- 通过rpc公开方法的工具(使用脏的自定义协议或 zerorpc,包括类似ipython tab completion的nicity)。
- 一个框架,用于创建长时间运行的应用程序,并公开它们 方法。
- 在一个终端上运行多个应用程序的工具 开发或生产中。
- 用于定义应用程序的简单语法(当前为django样式 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依赖于gevent==1.0。从理论上讲 应用程序使用操作系统线程,但这还没有经过测试。
开发状态
dirt被luminutics在生产环境中使用,并且 在过去的六个月里非常稳定。
也就是说,可能会有一些未经证明的假设 影响其他用户,因此在信任它之前应该进行一些测试 在您的生产环境中。