3

更新:在使用 Py3 进行了大量工作之后,包括编写我自己的异步 Web 服务器(在 Dave Beazley 的演示之后),我终于抛弃了 Python(以及我的一大堆代码)-:转而支持在NodeJS上运行的CoffeeScript。看看:GitHub(现在你可以在其中找到 95% 的有趣代码)、npm(对用户不友好的包管理器;很好摆脱,你从来没有辜负你的名字),一个疯狂的巨大的模块存储库(几乎 24/7 发布大量新内容),一个庞大而充满活力的社区,开箱即用的异步 HTTP 和文件处理......,所有这些(感谢V8占三分之一光速easy_install——有什么不喜欢的?阅读更多宣传:“脚本的未来”(幻灯片托管由SpreeWebdesign提供)。

有一个有趣的页面http://scotdoyle.com/python-epoll-howto.html关于如何在 python 3 中进行异步/非阻塞/AIO http服务。

有一个龙卷风网络服务器,它确实包括一个非阻塞的 http 客户端。我已经设法将服务器的某些部分移植到 python 3.1,但是客户端的实现需要pyCurl并且似乎有问题(一位参与者说 'Libcurl 是多么让人头疼',并看着令人难以置信的丑陋 pyCurl页面我怀疑 pyCurl 会很快到达 py3+)。

现在标准库中提供了 epoll,应该可以使用 python 开箱即用地执行异步 http 请求。我真的不想使用 asyncore 之类的;epoll 以作为该任务的理想工具而闻名,它是 python 发行版的一部分,因此使用除 epoll 之外的任何东西来实现非阻塞 http 是非常违反直觉的(如果你愿意,请证明我错了)。

哦,我觉得线程是可怕的。没有穿线。我使用无堆栈

对异步 http 主题进一步感兴趣的人不应错过peter portante 在 PyCon2010 上的演讲;同样令人感兴趣的是主题演讲,演讲者安东尼奥·罗德里格斯 (antonio rodriguez) 曾强调在标准库中拥有最新的 Web 技术库的重要性。

编辑可能有很多方法可以以很少的资源消耗实现高吞吐量。然而,不仅仅是我认为放弃线程(以及其他部分过时的方法);谷歌skipfish项目的人似乎也有类似的想法:他们说skipfish使用

多路复用单线程、完全异步的网络 I/O 和数据处理模型,消除了一些多线程客户端中存在的内存管理、调度和 IPC 低效率。

4

4 回答 4

1

FWIW,我有一个图书馆:http: //github.com/mnot/nbhttp/

客户端作为 redbot.org 的一部分正在生产中。

我没有在 Python 3 中尝试过,但它可能有助于您的工作。

干杯,

于 2010-04-14T05:42:33.417 回答
0

电路支持 epoll 并包括一个 async )#50 客户端。

http://circuitsframework.com/

于 2013-03-03T22:46:55.847 回答
0

这项民意调查中,几个月前,詹保罗·罗多拉说

我有一个添加 epoll() 支持的补丁,它几乎已经准备好了(asyncore 支持 poll(),而不是 epoll()),这只是编写测试的问题。

我不确定在哪里可以找到该补丁,但这似乎是一个足够简单的任务,它应该很容易移植到asyncore(异步服务器和客户端的标准 python 库方法——当然,远远落后于 Twisted 或 Tornado,但这就是标准库有;-)。

于 2010-03-22T03:07:02.457 回答
-2

Python 3 缺少库。您似乎对帮助您做事的库感兴趣,那么您究竟为什么要使用 python 3 来解决您的问题呢?

于 2010-03-24T20:59:07.460 回答