【问题标题】:Python web-scraping threaded performancePython网络抓取线程性能
【发布时间】:2011-02-15 11:22:29
【问题描述】:

我有一个需要同时测试功能和性能的 Web 应用程序,我们计划使用的部分测试套件已经用 Python 编写。当我第一次写这篇文章时,我使用 mechanize 作为我的网络抓取方式,但对于我想要做的事情来说,它似乎太笨重了(或者我错过了一些东西)。

我正在尝试做的基本布局如下。都是对象。

  • 用户有通讯(曾经是我的东西和机械化之间的接口)
  • Comm 有浏览器(包含我的 CookieJar、urllib2 和 BeautifulSoup 对象,以前是机械化的)
  • 浏览器有表单(过去是机械化处理的)

现在,就线程而言,我已经把它记下来了。将根据需要在处理 GIL 和运行单独的 Python 实例之间进行调整,但会采纳建议。

所以我需要做的是让用户点击应用程序并执行各种操作(登录、填写表单、提交表单以进行处理等),同时不要让测试框尖叫得太大声。我目前的机械化问题似乎是 RAM。

导致 RAM 问题的部分原因是需要为每个用户提供单独的浏览器实例,以防止每次我对不同的用户执行某些操作时覆盖 JSESSIONID cookie。

其中大部分可能看起来微不足道,但我正在尝试在这里运行数千个线程,所以微小的调整可能意味着很多。任何意见表示赞赏。

【问题讨论】:

    标签: python automated-tests web-scraping urllib2 mechanize-python


    【解决方案1】:

    线程会导致 GIL 出现问题,更多的内核更是如此。尝试使用 mechanize 和 eventlet 来实现并发(通过多个进程)也可以查看 multi-mechanize

    【讨论】:

      【解决方案2】:

      您是否考虑过异步库 Twisted 至少可以与用户进行交互?

      【讨论】:

        【解决方案3】:

        我实际上没有使用 mechanize,而是使用了 Threading 模块。这允许相当快速的事务,并且我还确保每个线程内部不要有太多。登录信息,并在我线程化之前让 web 应用程序处于必要的状态,这有助于线程运行更短,因此更快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-11
          • 2020-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多