Python在Windows7上启动很慢



Python在我的Windows7机器上加载的时间是在虚拟机上运行的Ubuntu 14.04(在相同硬件上的Windows内部)的17倍。Anaconda3发行版在Windows和Ubuntu默认的python3.4上使用。

从Bash提示符(Windows上的Git Bash):

$ time python3 -c "pass"

在Windows上返回0.614秒,在Linux 上返回0.036秒

当包裹被装载时,情况会变得更糟:

$ time python3 -c "import matplotlib"

在Windows上返回6.01,在Linux 上返回0.189

Spyder在Windows上的加载时间高达51秒,在Linux上的加载速度高达1.5秒。

我没有任何运气确定我为什么会有这种表现问题。有人知道我下一步该做什么吗?

编辑:

为什么python在windows上的速度慢得多?已经被认为是可能的重复,但我的性能差异要大得多,不能简单地通过不同的库依赖项和编译器来解释。在我看来,这似乎与文件系统的差异有关。

我在访问扫描时怀疑有防病毒软件,但为了以防万一,我禁用了防病毒软件。

>>> sys.path
['', 'c:\Anaconda3\python34.zip', 'c:\Anaconda3\DLLs', 'c:\Anaconda3\lib', 'c:\Anaconda3', 'c:\Anaconda3\lib\site-packages', 'c:\Anaconda3\lib\site-packages\Sphinx-1.2.3-py3.4.egg', 'c:\Anaconda3\lib\site-packages\cryptography-0.8-py3.4-win-amd64.egg', 'c:\Anaconda3\lib\site-packages\nose-1.3.4-py3.4.egg', 'c:\Anaconda3\lib\site-packages\win32', 'c:\Anaconda3\lib\site-packages\win32\lib', 'c:\Anaconda3\lib\site-packages\Pythonwin', 'c:\Anaconda3\lib\site-packages\setuptools-14.3-py3.4.egg']

更新:

在同一台电脑上重新安装Windows 8.1 Pro解决了这个问题。在重新安装所有应用程序和Anaconda3之后,Python的性能是我见过的最好的。不幸的是,这个问题的根本原因仍然未知。

更正:

在我的IT部门安装了Sophos SafeGuard加密软件和MS Endpoint Protection后,问题再次出现。和以前一样起步缓慢。禁用额外的软件并没有解决问题,所以我们正在其他机器上进行测试以跟踪问题。

通过卸载Sophos SafeGuard解决了问题。不过,这并不是一个真正令人满意的解决方案,因为我的公司在我每天访问的目录上使用这个文件系统加密软件。除了Python(显然还有Ruby)之外,我似乎没有任何其他性能问题。

注意:Sophos SafeGuard不是防病毒软件。它是一个企业文件系统加密系统。奇怪的是,本地文件系统(比如安装Python的地方)明确没有启用加密。

可能与您的情况无关,但我发现在Windows中使用Sophos Safeguard和Mcafee Enteprise Antivirus运行python时,如果python作为提升进程运行,则python启动时间会慢一个数量级。将其转换为正常流程对我来说有着巨大的不同

  1. 启动差异的一个因素可能是默认加载的模块。您可以使用sys.modules来比较您的两个环境

python -c "import sys;print(len(sys.modules))"

对我来说,答案是

$ time py -2 -c "pass"
real    0m0.054s
user    0m0.000s
sys     0m0.000s
$ py -2 -c "import sys;print(len(sys.modules))"
44
$ time py -3 -c "pass"
real    0m0.063s
user    0m0.000s
sys     0m0.000s
$ py -3 -c "import sys;print(len(sys.modules))"
54

您还可以使用虚拟环境来操作默认加载的模块。https://virtualenv.pypa.io/en/latest/

  1. Git bash for windows似乎对我使用python行为不端。当我启动解释器时,我没有看到版本横幅。我会将开始时间与cmd提示符进行比较。甚至用python启动python。例如

-

import subprocess
import time
start = time.time()
subprocess.check_call(["python", '-c ', 'pass'])
print time.time() - start

相关内容

  • 没有找到相关文章

最新更新