【问题标题】:running time of python program is very small in ubuntu as compare to windows. why?与windows相比,ubuntu中python程序的运行时间非常短。为什么?
【发布时间】:2015-02-13 05:58:24
【问题描述】:

我在 Python 中实现了Dijkstra's algorithm,并在 Ubuntu 和 windows 8 下运行了脚本。都是 x64 架构。

我使用 python -m cProfile name.py 分析了脚本

我很惊讶地发现,与 Windows 相比,该程序在 Ubuntu 中花费的时间是 Windows 的一半。

1000 x 1000 矩阵的 Ubuntu 运行时间:0.4 sec

1000 x 1000 矩阵的 Windows 运行时间 = 1.2 sec

这是在同一台双启动机器上。

这是怎么回事?

【问题讨论】:

  • 两个实例中的python版本相同吗?这是 python 第一次在 Windows 上运行但之前在 ubuntu 上运行过吗?
  • 但是你已经为小于0.4 sec的windows显示了1.21 sec
  • @MattCoubrough 相同的 python 版本 2.7 。我通常在这个系统上使用 python。
  • 你能给出用来计时的命令吗?也许它包括系统时间以及脚本的运行时间。

标签: python windows ubuntu profiling cumulative-sum


【解决方案1】:

首先 - 显而易见的是,虽然 python 的版本可能相同,但它们是用不同的编译器编译的,这自然意味着优化级别完全不同。例如,您可以使用 gcc 为两个系统重新编译 python 并再次运行整个过程。但是,我建议您仅在您确定自己在做什么的情况下才这样做。更具体地说,对于 linux,因为许多运行的进程严重依赖于 python。看看this的讨论。

第二——windows自然比linux占用更多的资源,开箱即用的windows启动的进程明显更多,每个进程通常是一个无限循环,占用资源。

基于操作系统比较性能是一个错误的概念。这基本上就像将苹果与橙子进行比较。每个系统都有不同的方式来管理它的内存和正在运行的进程。文件系统是另一个非常重要的部分——因为在大多数情况下,python 是一种解释性语言,所以每次导入都在执行磁盘操作。

【讨论】:

  • “基于操作系统组合进程是一个错误的概念”。什么?这可能发生的原因有一百万个,但如果这些原因完全是环境原因,那么我最快会错误地处理我的过程。这是比较的一个很好的理由,而且似乎没有“错误”。
  • 附言。我的公司目前正在将 2 个不同版本的 SLES 与我们当前安装的 Solaris 进行比较。 ZFS 的行为有所不同,我们每秒可以获得 200 到 700 MB/S 的读取。现在操作系统重要吗?
  • @Ben 这是因为一旦操作系统启动就没有“完美真空”之类的东西。正如我所说,开箱即用的 Linux 在管理内存方面比 Windows 更有效。但这是开箱即用的。对系统如何执行有一定了解的唯一方法是切断所有脂肪,然后运行测试。在 Linux 中,这几乎是可行的。在 Windows 中 - 不是真的。
  • 首先你提到 Python 正在被编译。然后在同一个答案中,您说 Python 在大多数情况下都会被解释。好像很矛盾……
【解决方案2】:

实际上,有几件事是我的机器上 Python 性能缓慢的原因。但是,我没有统计数据,所以我这边没有证据。您可能还需要检查它们(还要加一点盐;-))。

  • 防病毒软件 - 如果有任何防病毒软件,请将 Python 位置以及程序的位置添加到白名单中,然后尝试运行它们;这实际上使我获得了近 33% 的性能
  • 进程优先级 - 在运行时为进程赋予高优先级(在我的情况下,这是一个长时间运行的进程,所以我只是通过任务管理器来完成)
  • 正确的驱动程序 - 相信我。尽管这听起来有些愚蠢,但升级设备驱动程序确实可以提高性能。例如,当我从外部硬盘运行 python 进程时,与内部硬盘相比,它运行得更好一些。一旦我更新了我的硬盘驱动程序,它实际上开始比我的外部硬盘运行得更好(需要注意的是它仍然比 Linux 版本慢)

但是,这些可能仍无法帮助您达到 Linux 那样的性能。主要原因是两个 python 都可能由不同的 c 编译器编译。 libc 也可能正在运行。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 2021-10-28
    • 1970-01-01
    • 2021-12-18
    • 2014-08-28
    • 2013-09-03
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多