使用Stackless Python 3.1的基本异步(非阻塞)HTTP客户端的任何现成解决方案?

时间:2010-03-03 15:58:24

标签: python http stackless python-stackless

更新:经过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

  1. 是在无堆叠,协作安排的环境中有意义的唯一方法;

  2. 在Stackless Python 3中是可行的,因为标准库easy_install(在Py2.6中引入;一些解决方案更喜欢select epoll,但这意味着另一个障碍stacklessexamples );

  3. 遗憾的是,
  4. 仍然不是家庭用品,大多数人都依赖阻止HTTP。

  5. 现在的样子,我必须学习套接字编程的基础知识并滚动我自己的HTTP服务器/客户端库。我仍然回避这项任务,因为我在该领域的背景很少,并且必然会以这种方式“重复历史”。

    我会对任何相关指针感到非常高兴。我更喜欢使用libevent的解决方案;我似乎记得它比旧的select.epoll更具可扩展性(但也许有人对此有更精确的数据)。作为最低要求,解决方案应该在Ubuntu 9.10上运行。

2 个答案:

答案 0 :(得分:0)

我知道这就像复活了死者一样(并且流程可能早已解决了他的问题),但为了完整性,无可用于3.1.3:

有关使用stacklesssocket实现HTTP服务器的信息:

答案 1 :(得分:0)

非阻塞HTTP情况很好地处理了扭曲,创建一系列回调,并使用延迟注册这些回调。 Twisted documentation值得一试。 Stackless使用微线程但是使用碎片编码整个Web框架使用片段非bloking代码链接回调,errbacks和延迟运行是单个线程上的主反应器循环。认为这应该是Async HTTP更好的事情。