子进程WSGI中间件和Pyramid微件。
项目描述
此包是为了支持使用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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 182c3ecd1d5657dbfb2e1d22629835305b26851d8baaf759f10cd1b2e4b4697e |
|
MD5 | f784acee2a9faba045ea721a7b2d1a0d |
|
BLAKE2b-256 | 5630ab3a1f62f706c1081f51b1660167cd877acf7a36c6cf4ba621596f1b34e8 |