跳转到主要内容

子进程WSGI中间件和Pyramid微件。

项目描述

https://travis-ci.org/lrowe/subprocess_middleware.svg?branch=master

此包是为了支持使用nodejs将Python生成的JSON渲染为HTML而构建的。复用转换子进程,避免进程启动开销,并允许即时编译(JIT)启动。对于我们来说,这为后续响应提供了10倍的速度提升。

协议简单通用,HTTP格式化的响应(头和体)被管道输入和输出到转换子进程中。转换可以修改响应头和体。

修改响应体的转换必须确保Content-Length头更新以匹配。

Python 2和subprocess32

Python 2.7中的subprocess模块可能会泄漏文件描述符。从Python 3.x回退的修复可在subprocess32中找到,如果已安装,将使用这些修复。

管道缓冲

对于小型响应,Unix命令cat作为一个身份转换工作。一旦响应超过管道缓冲区限制(通常为16K或64K),两个进程都会等待对方读取,从而导致死锁。为了避免这种情况,子进程应在写入stdout之前读取每个响应的整个内容,并在响应结束时刷新stdout。

绕过此限制需要在不同线程中写入和读取。

替代方案

Apache mod_ext_filter

使用mod_ext_filter,响应体简单地通过一个外部程序进行管道传输。为每个响应启动一个新的进程,因此它具有与CGI相同的限制,即每个请求都需要支付应用设置的成本。

FastCGI过滤器

FastCGI定义了一个过滤器角色,用于通过长生存期进程转换响应。不幸的是,Apache的mod_fcgid不支持过滤器角色,而FastCGI协议本身实现起来也相当复杂。

转换HTTP反向代理

另一种选择是在HTTP代理中实现转换。这会增加部署复杂性,需要多个跃点来支持SSL。

PyV8

PyV8允许在进程中运行JavaScript。与nodejs包相比,构建PyV8可能比较棘手。

uWSGI转换

uWSGI正在为其转换系统开发一个rpc插件。rpc协议本身有一个64k请求大小限制。

项目详情


下载文件

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

源代码分发

subprocess_middleware-0.3.zip (14.5 kB 查看哈希值)

上传时间 源代码

由支持