【问题标题】:my API's parsing data with beautifulSoup4 and python is too slow我的 API 用 beautifulSoup 和 python 解析数据太慢了
【发布时间】:2018-10-23 01:01:25
【问题描述】:

我已经做了API解析每个账户的GITHUB贡献数据并按月、周或天排列并用JSON装饰。

仅响应一个请求大约需要 2 秒。 (1800 毫秒)

Link 到我的 GitHub 存储库。

contributions.py in repository 是执行上述操作的 python 代码。

问题的重点:是什么让我的 API 变慢了?

要解析的数据太多(大约 365 个)? api制作JSON字符串的方式?

感谢您提前回答并帮助我。

【问题讨论】:

  • 您的 API 是否在每个请求中对 Github 进行多次 http 调用?看起来你的 for 循环中没有任何 getContributions 调用,但 BeautifulSoup4 可能也在幕后做一些缓慢的事情

标签: python json performance parsing beautifulsoup


【解决方案1】:

“为什么我的代码很慢?”是一个很难回答的问题。基本上有无数可能的原因。我可能无法回答这个问题,但我可以提供一些建议,希望能帮助您自己回答。

有几十个问题要问...您使用的是哪种硬件?你有什么样的网络/互联网连接?只是第一个请求慢,还是所有请求都慢?只是对一种类型的请求(每天、每周、每月)或所有请求的调用速度很慢?等等等等。

您表示总体请求时间约为 1800 毫秒,但正如您所指出的,在处理该请求期间发生了很多事情。根据我的经验,通常最好的找出方法之一是添加一些计时代码来缩小缓慢的范围。

例如,一种快速而肮脏的方法是使用 python 时间模块。我很快在每周贡献方法中添加了一些代码:

  import time

  # [...]

  @app.route("/contributions/weekly/<uname>")
  def contributionsWeekly(uname):
    before = time.time()
    rects = getContributionsElement(uname)
    after = time.time()
    timeToGetContribs = after - before

  # [...]

  print(' timeToGetContribs: ' + str(timeToGetContribs))
  print('timeToIterateRects: ' + str(timeToIterateRects))
  print('   timeToBuildJson: ' + str(timeToBuildJson))

在本地运行此代码产生以下结果:

 timeToGetContribs: 0.8678717613220215
timeToIterateRects: 0.011543750762939453
   timeToBuildJson: 1.5020370483398438e-05

(注意最后一次结束时的e-05...时间非常短)。

从这些结果中,我们知道获取贡献的时间占据了完整请求的大部分时间。现在我们可以深入研究该方法,以尝试进一步隔离最耗时的部分。下一组结果显示:

        timeToOpenUrl: 0.5734567642211914
timeToInstantiateSoup: 0.3690469264984131
      timeToFindRects: 0.0023255348205566406

由此看来,大部分时间都花在了实际打开 URL 和检索 HTML 上(这意味着可能存在网络延迟、互联网连接速度、GitHub 服务器响应时间等问题)。其次是实例化 BeautifulSoup 解析器所花费的时间。

对所有这些具体数字持保留态度。这些在我的硬件(12 岁的 PC)和我的本地互联网连接上。在您的系统上,数字可能会有所不同,甚至可能有很大不同。关键是,跟踪缓慢的最佳方法是通过一些基本的故障排除步骤来确定出现缓慢的位置。确定问题区域后,您可能可以搜索更具体的答案,或提出更有针对性的问题

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2015-02-13
    • 2018-11-19
    • 2010-10-02
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多