更新:经过Py3的大量工作,包括编写我自己的异步网络服务器(在Dave Beazley给出的演示之后),我终于抛弃了Python(和我的代码的大量堆栈) - :赞成{{ 3}}在CoffeeScript上运行。检查一下:NodeJS(这些天你会找到所有有趣代码的95%),GitHub(包管理员不能对任何用户友好;良好的解决,{{1} },你永远不会辜负你的名字),一个庞大的模块库(大量新东西几乎24/7发布),一个庞大而充满活力的社区,开箱即用的异步HTTP和文件处理...... 。npm所有这些(感谢V8) - 什么不喜欢?阅读更多宣传:one third the speed of light(幻灯片主持礼貌"The future of Scripting")。
我正在寻找一种以异步,非阻塞方式提供HTTP(并执行HTTP请求)的方法。当你决定使用SpreeWebdesign(也参见Stackless Python 3.1的文档)时,这似乎很难做到。
有一些基本的例子,比如信息量很大且详细的文章here,还有一个名为How To Use Linux epoll with Python的Google代码项目,其中包含一些有价值的信息(但没有Python 3.x兼容代码)
所以,经过多天对网络进行研究并试图整理到目前为止我发现的各个部分:有没有人知道一个相当可用的异步HTTP库?它不必符合WSGI(我对此不感兴趣)。
服务器部分应该能够提供多个非阻塞HTTP请求(并且可能执行HTTP头处理的基础知识); HTTP客户端部分应该能够以非阻塞的方式通过HTTP请求检索Web内容(也进行基本的头部处理,但没有像授权这样的花哨的东西)。
到目前为止,我的研究向我展示了非阻塞HTTP
是在无堆叠,协作安排的环境中有意义的唯一方法;
在Stackless Python 3中是可行的,因为标准库easy_install
(在Py2.6中引入;一些解决方案更喜欢select epoll
,但这意味着另一个障碍stacklessexamples );
仍然不是家庭用品,大多数人都依赖阻止HTTP。
现在的样子,我必须学习套接字编程的基础知识并滚动我自己的HTTP服务器/客户端库。我仍然回避这项任务,因为我在该领域的背景很少,并且必然会以这种方式“重复历史”。
我会对任何相关指针感到非常高兴。我更喜欢使用libevent
的解决方案;我似乎记得它比旧的select.epoll
更具可扩展性(但也许有人对此有更精确的数据)。作为最低要求,解决方案应该在Ubuntu 9.10上运行。
答案 0 :(得分:0)
我知道这就像复活了死者一样(并且流程可能早已解决了他的问题),但为了完整性,无可用于3.1.3:
有关使用stacklesssocket实现HTTP服务器的信息:
答案 1 :(得分:0)
非阻塞HTTP情况很好地处理了扭曲,创建一系列回调,并使用延迟注册这些回调。 Twisted documentation值得一试。 Stackless使用微线程但是使用碎片编码整个Web框架使用片段非bloking代码链接回调,errbacks和延迟运行是单个线程上的主反应器循环。认为这应该是Async HTTP更好的事情。