更新:在使用 Py3 进行了大量工作之后,包括编写我自己的异步 Web 服务器(在 Dave Beazley 的演示之后),我终于抛弃了 Python(以及我的一大堆代码)-:转而支持在NodeJS上运行的CoffeeScript。看看:GitHub(现在你可以在其中找到 95% 的有趣代码)、npm(对用户不友好的包管理器;很好摆脱,你从来没有辜负你的名字),一个疯狂的巨大的模块存储库(几乎 24/7 发布大量新内容),一个庞大而充满活力的社区,开箱即用的异步 HTTP 和文件处理......,所有这些(感谢V8)占三分之一光速easy_install
——有什么不喜欢的?阅读更多宣传:“脚本的未来”(幻灯片托管由SpreeWebdesign提供)。
我正在寻找一种以异步、非阻塞方式提供 HTTP(并执行 HTTP 请求)的方法。当您像我一样决定使用Stackless Python 3.1(另请参阅此处的文档)时,这似乎很难做到。
有一些基本示例,例如信息量很大且详细的文章How To Use Linux epoll with Python,还有一个名为stacklessexamples的 Google 代码项目,其中包含一些有价值的信息(但没有与 Python 3.x 兼容的代码)。
因此,经过多天的网络研究并尝试将我迄今为止发现的部分组合在一起:有人知道一个相当可用的异步 HTTP 库吗?它不必符合 WSGI(我对此不感兴趣)。
服务器部分应该能够服务多个非阻塞 HTTP 请求(并且可能进行 HTTP 标头处理的基础知识);HTTP 客户端部分应该能够以非阻塞方式通过 HTTP 请求检索 Web 内容(也进行基本的标头处理,但没有像授权这样的花哨的东西)。
到目前为止,我的研究表明,非阻塞 HTTP
是在无堆栈、协作调度的环境中唯一有意义的方法;
凭借标准库在 Stackless Python 3 中是可行的
select epoll
(在 Py2.6 中引入;一些解决方案更喜欢libevent
,但这意味着另一个障碍,因为pyevent 项目似乎已经停止在 Py2.5 开发);遗憾的是,它仍然不是家庭用品,大多数人都依赖于阻止 HTTP。
现在的样子,我必须学习套接字编程的基础知识并推出我自己的 HTTP 服务器/客户端库。我仍然回避这项任务,因为我在该领域的背景很少,并且注定要以这种方式“重复历史”。
我会很高兴任何相关的指针。我非常喜欢使用select.epoll
; 我似乎记得它比旧的更具可扩展性asyncore
(但也许有人对此有更精确的数据)。作为最低要求,解决方案应在 Ubuntu 9.10 上运行。