首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Twisted异步WSGI

Twisted异步WSGI
EN

Stack Overflow用户
提问于 2011-07-20 08:34:51
回答 2查看 3.8K关注 0票数 8

我正在为一个扭曲的应用程序构建一个web界面,并且希望直接使用WSGI,而不是直接使用twisted.web (因为网站的其余部分是WSGI,我已经有了大量的WSGI代码库)。

我找到的关于WSGIResource (http://twistedmatrix.com/documents/current/web/howto/web-in-60/wsgi.html)的Twisted文档页面声明:与其他任何WSGI容器一样,您不能在WSGI应用程序中执行任何异步操作,即使这是一个Twisted WSGI容器。

这一定是真的吗?在WSGI中,是否有一些不那么麻烦的方式来执行twisted.web风格的异步web请求处理--也许是作为另一个自由软件项目的一部分?如果没有,我的计划是让WSGI线程在反应堆线程中执行异步工作,并通过轮询来阻塞,直到数据可用为止。不是很漂亮。

如果有一种比较简单的方法来异步处理WSGI请求,那么我很乐意听到它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-20 11:14:54

为什么要使用WSGI并做异步的事情?WSGI的好处是您可以在任何WSGI容器上部署应用程序。如果您开始使用Twisted API来执行异步操作,那么您只能在Twisted的WSGI容器中部署应用程序。

对于异步代码,您可能应该只使用没有WSGI的Twisted Web。

票数 5
EN

Stack Overflow用户

发布于 2011-09-06 00:35:19

原则上,WSGI与异步程序设计并不是本质上不兼容的;事实上,PEP 333需要相当长的时间来指定服务器、应用程序和中间件必须如何运行才能支持这类事情。

其核心是将迭代器返回到容器。每次调用异步wsgi app_iter时,它都会检查其所有挂起的异步任务(数据库连接等),如果其中任何一个都有数据,则app_iter会生成一些数据;否则它会生成一个空字符串。为了支持这一点,wsgi容器需要跟踪所有的在途请求,并依次迭代每个请求以获得更多的数据,此外还需要为其负责的任何其他延迟工作提供服务。

原则上,很少有wsgi应用程序或框架真正做到这一点。几乎所有情况下,wsgi框架都会因为各种原因而阻塞;从磁盘读取文件或以任何理由从数据库加载数据(大多数ORM使得这是一个很难避免的问题)。that的wsgi容器的工作假设是,由于某些wsgi应用程序阻塞,所以任何wsgi应用程序都可能阻塞,因此总是在线程中运行它们。

您可以做两件事:要么探索自己的web框架,这是相当坚实的;要么考虑创建一个wsgi包装器,用于扭曲容器外部的扭曲。确保wsgi应用程序实际上是异步的,这当然是后者的先决条件,但是wsgi本身非常简单,在http上是一个很薄的包装,所以它应该很容易。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6759115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档