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

标签 python http asynchronous python-3.x nonblocking

更新:在大量使用 Py3 之后,包括编写我自己的异步网络服务器(根据 Dave Beazley 的演示),我终于放弃了 Python(和我的一大堆代码)-:支持 CoffeeScript 运行在 NodeJS 上。检查一下:GitHub(现在你会发现 95% 的有趣代码),npm(对用户来说一点都不友好的包管理器;很好的解脱,easy_install,你从来没有活过取决于你的名字),一个非常庞大的模块存储库(几乎 24/7 发布了大量新东西),一个巨大而充满活力的社区,开箱即用的异步 HTTP 和文件处理......,所有这些(感谢 V8 ) 在 one third the speed of light — 有什么不喜欢的?阅读更多宣传:"The future of Scripting"(幻灯片托管礼貌 SpreeWebdesign)。

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

tornado web server 确实包含一个非阻塞 http 客户端。我已经设法将服务器的一部分移植到 python 3.1,但是客户端的实现需要 pyCurlseems to have problems(一位参与者说“Libcurl 是多么令人头疼”,并且看着令人难以置信的丑陋的 pyCurl 页面我怀疑pyCurl 将很快到达 py3+)。

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

哦,我觉得线程太可怕了。没有线程。我使用 stackless

对异步 http 主题更感兴趣的人不应该错过这个 talk by peter portante at PyCon2010 ;同样令人感兴趣的是 the keynote,演讲者 antonio rodriguez 在某一时刻强调了在标准库中拥有最新的网络技术库的重要性。

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

Multiplexing single-thread, fully asynchronous network I/O and data processing model that eliminates memory management, scheduling, and IPC inefficiencies present in some multi-threaded clients.

最佳答案

FWIW,我在以下位置有一个图书馆: http://github.com/mnot/nbhttp/

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

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

干杯,

关于python - 如何使用 epoll 和 python 3.1 进行异步 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2489780/

相关文章:

Jquery Datetimepicker 到 Python Datetime

c# - ASP.NET 回发和 URL

asynchronous - Angular 2 - 显示来自 promise 的异步对象数据

python - 可以同时做更多的 Action 吗?

c# - 使用 C# 将同步方法转换为异步方法

python - 如何让用户在 CharField 中引用他们上传的文件?

python - 字符串上的多个分割

python - for line in json 对象每行返回一个字符

http - 当它们具有相同的特性、质量和级别时,应该从 HTTP Accept header 中选择哪种媒体类型?

http - 获取 HTTP 响应的所有 header 并在下一个 HTTP 请求中发回