【问题标题】:How do you make python script run faster? [closed]如何让 python 脚本运行得更快? [关闭]
【发布时间】:2013-05-23 06:59:20
【问题描述】:

当我在pythonanywhere.com 上运行脚本时,我注意到一个很大的不同。时间比在我的 PC 上运行相同的脚本要短 7-8 倍,我想了解原因。我在 Intel® Core™ i7-3630QM 处理器(6M 缓存,高达 3.40 GHz)、8GB 内存和 SSD 硬盘驱动器上运行 Ubuntu 12.04 LTS,速度超过 500MB/s。 有人可以向我解释我必须做什么才能达到相同的性能吗?有任何想法吗?谢谢

【问题讨论】:

  • 你是怎么计时的?
  • 你在做什么?
  • 我抓取一个网站做了很多事情。他们中的大多数都在向服务器发送 POST 数据。
  • 网络可能是家用电脑的瓶颈。
  • 不是所有的代码都在那里,除非我不知道如何使用它(我只能看到前 22 行),但是你意识到两次调用 sleep() 会减慢速度下。我想知道“请点击”是否意味着需要一些人工操作。

标签: python linux performance pythonanywhere


【解决方案1】:

在 10 例中有 9 例的情况下,当我解释为什么某事运行缓慢时,我是错误的。如果你看看我的名声,这意味着:我多年前就停止尝试了,因为它根本行不通。

将日志记录添加到您的脚本中,告诉您哪个步骤需要多少时间。在两边运行脚本并比较结果。这是找出某事为什么慢或快的最佳方法。

【讨论】:

  • 我做到了,结果令人惊叹。登录部分在 pythonanywhere 和我的 PC 上花费了 5-7 秒的时间。我还检查了从我的 PC 到 Web 服务器的上游,没有波动 - 经常超过 900K
  • 检查 pythonanywhere 是否实际接收到正确的数据。
【解决方案2】:

在您的程序中使用线程。我有一个 python 程序,它从 Finance.yahoo.com 下载 500 只股票中的每只大约 2KB 的数据到我的家用笔记本电脑,并将每只股票写入一个单独的文件。我有一个典型的家庭互联网连接(802.11G)。使用单个线程需要 2-3 分钟,但使用 40 个线程需要不到 4 秒。我在 2005 年获得的 Intel Core 2 CPU T5600、1.83 GHz 和 2 GB RAM 上安装了 Windows XP。

【讨论】:

  • 正如我之前回答的,我使用它们 > pastebin.com/NSenWPXm 但还是比较慢 :(
  • 在开始使用线程之前,您应该尝试对代码中运行缓慢的部分进行基准测试。尝试在本地和 pythonanywhere 上计时几个请求(比如 100 个),您可以轻松计算均值和方差,看看发生了什么。如果网络确实是瓶颈,那么线程可能会有所帮助,但如果瓶颈是其他原因,那么线程可能对您没有任何好处。
  • 正如我上面所说的,我只能看到 22 行代码,而你使用 sleep()。据我所知,如果编码正确,线程不会使其运行速度慢 7-8 倍。抓取是否将每个页面发送到您的机器?如果是这样,那么结合发送 POST 数据对我来说听起来像是 I/O 而不是 CPU,所以线程应该会有所帮助。
  • 是的,如果你有成千上万的独立计算,我也支持多线程。
猜你喜欢
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2013-03-14
  • 1970-01-01
相关资源
最近更新 更多