如何使用epoll和python 3.1执行异步http请求

如何使用epoll和python 3.1执行异步http请求,python,http,asynchronous,python-3.x,nonblocking,Python,Http,Asynchronous,Python 3.x,Nonblocking,更新:在对Py3进行了大量工作后,包括编写自己的异步Web服务器(在Dave Beazley的演示之后),我最终放弃了Python(以及我的大量代码)-:转而在上运行。看看吧:(在这里,你会发现最近95%的有趣代码),(包管理器不可能是任何用户友好的;很好的摆脱,easy\u install,你从来没有辜负过你的名字),一个巨大的模块库(大量新东西几乎全天候发布),一个巨大而充满活力的社区,开箱即用的异步HTTP和文件处理…,所有这些(感谢)at-有什么不喜欢的?阅读更多宣传:(幻灯片主持礼貌)

更新:在对Py3进行了大量工作后,包括编写自己的异步Web服务器(在Dave Beazley的演示之后),我最终放弃了Python(以及我的大量代码)-:转而在上运行。看看吧:(在这里,你会发现最近95%的有趣代码),(包管理器不可能是任何用户友好的;很好的摆脱,
easy\u install
,你从来没有辜负过你的名字),一个巨大的模块库(大量新东西几乎全天候发布),一个巨大而充满活力的社区,开箱即用的异步HTTP和文件处理…,所有这些(感谢)at-有什么不喜欢的?阅读更多宣传:(幻灯片主持礼貌)。

有一个有趣的页面介绍了如何在Python3中实现asnchronous/non-blocking/AIO http服务

有一个包含非阻塞http客户端的。我已经设法将服务器的一部分移植到Python3.1上,但是客户端的实现需要和(一位参与者说“Libcurl是一个令人头痛的问题”,并且看着令人难以置信的pyCurl页面,我怀疑pyCurl很快就会出现在py3+上)

既然标准库中提供了epoll,那么就可以使用python进行开箱即用的异步http请求了。我真的不想使用asyncore之类的东西;epoll以其理想的任务工具而闻名,并且它是python发行版的一部分,因此使用epoll以外的任何东西来实现非阻塞http都是非常违反直觉的(如果您愿意,请证明我是错的)

哦,我觉得穿线很可怕。禁止穿线。我用

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

编辑可能有许多方法可以在几乎不消耗资源的情况下实现高吞吐量。然而,不仅仅是我认为放弃线程(和其他部分过时的方法);现场的人们似乎也有类似的想法:他们说skipfish使用

多路复用单线程,完全 异步网络I/O和数据 消除 内存管理、调度和IPC 一些国家的效率低下 多线程客户端

几个月前,Giampaolo Rodolá说

我有一个用于添加epoll()的修补程序 几乎准备就绪的支持 (asyncore支持poll(),而不是 epoll()),这只是一个问题 写作测试


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

python 3缺少库。您似乎对库很感兴趣,可以帮助您完成工作,那么您为什么要使用python 3来解决您的问题呢?

FWIW,我有一个库,位于:

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

我还没有在Python3中尝试过,但它可以作为您工作的基础


干杯,

电路支持epoll,并包括一个异步(50)客户端


是的,但epoll也在标准库中。。。正如一些人所指出的(例如),asyncore可能是令人讨厌的。我真的把我的心放在了epoll上……python3是未来!;-)实际上,Python3的标准库比2.x系列的要好一点。在语言方面,有很多改进;其中包括对字符串编码问题的合理处理。有了这一点,大多数编码方面的麻烦就消失了!我想坚持使用Python2将会是一个普遍的现象,就像Python1.5.x和InternetExplorer6一样。我实际上只是在构建一个进程间通信,这样我就可以在Python2.6下运行一些东西,在3.1下运行一些东西。。。但是在3.1中正确地执行它会更好@flow:所有字符串编码的改进都被后端口到2.6,所以这并不是很大的改进-您可以从uuu future_uuuu导入unicode_文本,就这样!事实上,大多数改进都是后端口的,并且会丢失库,因此目前py3的痛苦大于改进。也许他们将来会在py3上做一些吸引人的事情,但是改进还不足以弥补升级的麻烦。Python2.x已经停止开发,这意味着在该分支中启动任何项目都是非常不明智的。除此之外,我建议这些天转到NodeJS——请参阅我的问题更新中的我的建议。@flow:单是它停止了官方开发并不意味着使用它是不明智的。当它解决了你的问题并且拥有你想要的东西时,它是非常明智的。我不会建议“你必须把所有的东西都写出来,从头开始重写,因为语言有了新版本”。即使语言版本号更高,它似乎也在倒退。事实上,在决定某件事是否可取时,版本号似乎并不重要。这就是说,Python2.x开发继续以“pypy”的名义在新的更快的实现上进行。