在Python中发出大量HTTP请求

时间:2011-02-09 18:27:56

标签: python multithreading http http-headers

我正在尝试测试一个Web应用程序,其中一部分涉及发出~10K请求,只需要少量< 1K返回200 OK并查看其数据。 webapp是错误的并且存在误报,因此每个200 OK必须至少进行三次检查。

在Python中工作我试图用线程和urllib来做这个,但是在linux上我在~920个线程后得到了线程错误。 (我的理论是它/proc/sys/kernel/threads-max除以30这是非常准确的,但令人不安的是每个线程将注册为与os的30个线程。无论如何,我正在为这项任务寻找一个好的解决方案。我看过Twisted,但看起来我仍然会被线程束缚。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我正在测试白色apache ab网络服务器TORNADO,并且在我的双核心Athlon @ 2Ghz上无法超过每秒1000个连接。 30%的资源用于测试工具ab,剩下的用于服务器。我相信大多数资源都是由操作系统和IP-eth层花费的。

http://amix.dk/blog/post/19581
非阻塞服务器比阻塞服务器具有更好的性能,因为它们不会为每个连接产生轮廓。从理论上讲,它们可以单一运行。

答案 1 :(得分:0)

您可以尝试使用asynchronous HTTP requests(文章底部有示例代码)。

答案 2 :(得分:0)

我使用FunkLoad在使用网站编写批量交易脚本方面取得了很大成功。

答案 3 :(得分:0)

我过去使用了libcurl(pycurl)的Python绑定。使用多客户端功能,它在C中异步执行。它非常快。