python - 为什么在 Windows 上导入某些 SciPy 模块需要这么长时间?

标签 python performance scipy

在我的一些其他方面相对较快的 Windows 机器上,导入像 scipy.signal 这样的 SciPy 模块需要非常长的时间(超过一秒)。

而且我不能简单地在中间使用 Ctrl-C 来查看发生了什么,这要感谢旧的 SciPy 覆盖了堆栈跟踪:

forrtl: error (200): program aborting due to control-C event
Image              PC                Routine            Line        Source
KERNELBASE.dll     00007FFBD9AFD37F  Unknown               Unknown  Unknown
KERNEL32.DLL       00007FFBDBE213D2  Unknown               Unknown  Unknown
ntdll.dll          00007FFBDC8C54E4  Unknown               Unknown  Unknown

不过,这并没有发生在我所有的机器上。怎么回事?

最佳答案

这对我来说是一个非常令人沮丧的问题,所以我在这里发布了解决方案。

我最终使用 Visual Studio 的调试器进入程序并查看它在做什么。

事实证明,有 2 个正交因素促成了这一点:

  • 出于我无法理解的原因,一些包(我在这里查看 scikits.odes)有 __init__.py这一行:

    __import__('pkg_resources').declare_namespace(__name__)
    

    出于我无法理解的原因,一旦导入了 scikits.odes(SciPy 出于某种奇怪的原因这样做),该行将结束运行,从您的安装中加载大量的包(看起来,大多数(如果不是全部))。安装越大,速度越慢。

    这个问题的解决方案是卸载这个有问题的包,或者如果你真的需要它,注释掉这一行(或做一些等效的事情)并希望它不会被冒犯。

  • 您还没有将您的 .py 文件编译为 .pyc(在您的 Python 安装中运行 python -m compileall .目录)。这实际上对很多包都有帮助。 (起初我持怀疑态度。)

解决这两个问题后,我的导入时间减少到 0.3 秒左右,这看起来很正常。

关于python - 为什么在 Windows 上导入某些 SciPy 模块需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43246944/

相关文章:

python - Qt4 : Write a function that creates a dialog and returns the choice of the user

performance - 有谁知道像 twitter/facebook/Amazon 这样的网站是如何进行性能测试和调整的?

mysql - 对大表使用 LIKE 操作时 MySQL 查询速度变慢

performance - Data.Map 是二叉搜索树的最佳数据类型吗?

python - 与 SciPy.optimize 的并行性

python - 在扭曲的程序中中断 raw_input

python - 使用 Python 在给定日期间隔列表的情况下查找日期子间隔的值

python - 如何计算字典元素的频率并去除python列表中重复的字典元素?

statistics - Python SciPy 卡方测试返回与 Excel 和 LibreOffice 不同的 p 值

python - 如何绘制优化的进度?