【问题标题】:Making massive numbers of HTTP requests in Python在 Python 中发出大量 HTTP 请求
【发布时间】:2011-02-09 18:27:56
【问题描述】:

我正在尝试测试一个 Web 应用程序,其中一部分涉及发出约 10K 的请求,获取返回 200 OK 的少数

在 Python 中工作我试图用线程和 urllib 来做到这一点,但在 linux 上,我在 ~920 个线程之后出现线程错误。 (我的理论是/proc/sys/kernel/threads-max 除以 30,这是非常准确的,但令人不安的是,每个线程都会在操作系统中注册为 30 个线程)。无论如何,我正在为这项任务寻找一个好的解决方案。我研究了 Twisted,但似乎我仍然会受到线程的约束。

有什么想法吗?

【问题讨论】:

  • 如果您通过docs.python.org/library/resource.html调整资源限制会发生什么?
  • 只是为了澄清一下任务:你想打开 ~10K 线程吗?我会使用 10 个顶部,每个顶部发出多个请求,处理输出然后以某种方式记录它。

标签: python multithreading http http-headers


【解决方案1】:

我正在测试 apache ab 网络服务器 TORNADO 并且无法在我的双核 athlon @ 2Ghz 上每秒进行超过 1000 个连接。 30% 的资源用于测试工具 ab,其余用于服务器。我非常确信大部分资源都花在了操作系统和 IP-eth 层上。

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

【讨论】:

  • 这是一个非常漂亮的解决方案,但它超出了我的需求。但我现在看到,可能连接的有限性可能是比最大线程数更具限制性的因素。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2020-08-31
        • 2017-11-28
        • 2019-11-30
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多