子进程wsgi中间件和金字塔中间层。

subprocess_middleware的Python项目详细描述


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

这个包是为支持使用nodejs将Python生成的JSON呈现为HTML而构建的。 转换子流程被重用,避免了流程启动开销,并允许jit启动。 对于我们的代码,这为后续的响应提供了10倍的加速

协议简单且通用,http格式的响应(头和正文)通过管道进出转换子流程。 转换可以修改响应头和正文。

修改响应体的转换必须确保更新内容长度头以匹配。

python 2和子流程32

Python2.7中的子进程模块可能泄漏文件描述符。 python 3.x中的后端口修复程序在subprocess32中提供,如果安装了,将使用。

管道缓冲

对于较小的响应,unix命令cat用作标识转换。 一旦一个响应超过管道缓冲区限制(通常为16k或64k),就会发生死锁,两个进程都在等待另一个进程读取。 为了避免这种情况,子进程应该在写入stdout之前读入每个响应的实体,并在响应结束时刷新stdout。

要解决这个限制,需要从不同的线程进行读写。

替代品

Apache mod_ext_过滤器

使用mod_ext_filter,响应体只需通过外部程序进行管道传输。 每个响应都会启动一个新的进程,因此它与cgi受到相同的限制,在cgi中,为每个请求支付应用程序设置成本。

快速CGI滤波器

FastCGI定义了一个筛选器角色,用于使用长寿命进程转换响应。 不幸的是,Apachemod_fcgid不支持filter角色,FastCGI协议本身实现起来不必要地复杂

转换HTTP反向代理

另一种选择是将转换作为HTTP代理的一部分实现。 这增加了部署SSL所需的多个跳数的显著部署复杂性。

PYV8

PyV8允许在进程中运行JavaScript。 虽然nodejs包很容易获得,但构建起来可能很困难。

uWSGI变换

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

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

推荐PyPI第三方库


热门话题
java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?   java将快速线程返回到池中,而不是等待慢速线程   创建jar文件时java SwingWorker不工作   java如何将依赖注入RabbitListener   java如何在gradle任务中通过scp复制目录?   java在MySql数据库中创建表时,遇到NullPointerException   java HTTP Status 500 Servlet执行引发异常   在JAVA中对arraylist使用继承时出错   java PowerMockito未完成存根异常   如果没有错误/警告增加到某个极限,java是否停止在eclipse中构建项目或使用maven?   java Robolectric如何测试DateFormat。getBestDateTimePattern()   google云平台GCP数据存储Java API,构建一个空值实体   VerifyListener和FocusListener之间的java冲突   安卓是否可以在Java中的另一个方法内部强制调用一个方法?   JavaWindows7、JDK1.8、SpringBoot应用程序JAR在方法安全性方面占用了大量时间。getProviders()返回   Bean提供程序的java错误消息   java Slick动画每帧必须有一个持续时间   java无法在Trie中设置isLeaf标志   java为什么JVM不能创建包含main方法的类的对象,以便从该类访问main方法,如果它具有该类的名称?   java Apache Camel+CXF端点身份验证