问题 为什么python在Windows上这么慢?


我今天学到了有关pystones的知识,所以我决定看看我的各种环境是什么样的。我在我的笔记本电脑上运行了pystones,它在裸机上运行窗口并得到了这些结果

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import pystone
>>> for i in range(0,10):
...   pystone.pystones()
...
(1.636334799754252, 30556.094026423627)
(2.1157907919853756, 23631.82607155689)
(2.5324817108003685, 19743.479207278437)
(2.541626695533182, 19672.4405231788)
(2.536022267835051, 19715.915208695682)
(2.540327088340973, 19682.50475676099)
(2.544761766911506, 19648.20465716261)
(2.540296805235016, 19682.739393664764)
(2.533851636391205, 19732.804905346253)
(2.536483186973612, 19712.3325148696)

然后我在我们的一些Linux VM上运行它,性能提高了2.7-3.4倍。所以我在我的笔记本电脑上启动了我的vmware Linux VM并重新进行了相同的测试并获得了以下结果:

Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in range(0,10):
...   pystone.pystones()
... 
(1.75, 28571.428571428572)
(1.17, 42735.042735042734)
(1.6600000000000001, 30120.48192771084)
(1.8399999999999999, 27173.913043478264)
(1.8200000000000003, 27472.52747252747)
(1.8099999999999987, 27624.30939226521)
(1.3099999999999987, 38167.938931297744)
(1.7800000000000011, 28089.88764044942)
(1.8200000000000038, 27472.527472527414)
(1.490000000000002, 33557.04697986573)

我不太明白在同一个窗口内运行的linux VM实际上比在windows下同一个裸机上运行的python更快。

关于Windows上的python有什么不同,它在裸机上执行速度比在同一个机器上运行Linux的VM内执行速度慢?

  • 更多细节 Windows平台Win7x64 在两个平台上运行32位python 在VMWare中运行Windows平台的32位Linux VM

10073
2018-04-14 04:01


起源

取决于同时运行的其他进程。 - K Mehta
不同的libc。 运行 - Ignacio Vazquez-Abrams
Python是在VM中运行还是在64位上运行?我看到Windows版本是32位。确保你比较苹果和苹果。 - agf
在处理文件时,Windows似乎没有Linux那么快。见[这个其他问题] [1]。 [1]: stackoverflow.com/questions/1842798/... - Roland Smith


答案:


我不能回答你的问题,但考虑一下可能会产生影响的事情清单:

  • 您正在使用不同版本的Python。 “2.7.2+”表示您的Linux Python是从版本控制检出而不是版本构建的。

  • 它们是用不同的编译器编译的(可以想象的是有意义的不同优化级别)。

  • 你没有提到复制这么多。可以想象,如果你没有,那就是侥幸。

  • 您的VM可能不准确。

  • 您正在链接Python的依赖项的不同实现,特别是libc,正如Ignacio Vazquez-Abrams指出的那样。

  • 我不知道pystone的实际基准是什么样的,但很多东西的工作方式不同 - 像unicode处理或磁盘IO这样的东西可能是系统相关的因素。


7
2018-04-16 20:11



在我写这篇文章之前,我复制了3次。是的,我没有提到它。 - boatcoder


在Windows 10上有类似的问题 - 这是因为 Windows Defender的

我不得不在Windows defender设置中排除python目录和进程并重新启动计算机。

之前:我不得不等待大约20秒来运行任何python代码 - 现在是毫秒。


6
2017-10-07 20:31



大!我和你的问题类似,让我试试我的Win10,并告诉你结果。 - Clock ZHONG


你在那个Windows机器上运行防病毒软件吗?这或许可以解释它。我个人喜欢将Python,Cygwin和我的sources目录添加到防病毒排除列表中 - 我想我得到了一个小但却明显的加速。也许这解释了你的结果。


3
2018-03-07 10:40



不,没有防病毒软件。 - boatcoder


对您的启动进行基准测试,但只需要一些缓慢的模块来初始化Windows。每次启动时,我都会在启动时节省一小段时间:

import os
import mimetypes #mimetypes gets imported later in dep chain

if __name__ == "__main__":
   # stub this out, so registry db wont ever be read, not needed
   mimetypes._winreg = None

缓慢的另一个原因是,多个标准库模块在导入时编译和缓存它们的正则表达式。 re.compile看起来就像它在Windows上的速度慢


0
2018-04-29 18:20