V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sujin190
V2EX  ›  Python

import 懒加载为啥性能低

  •  
  •   sujin190 ·
    snower · 2021-03-17 11:47:12 +08:00 · 2814 次点击
    这是一个创建于 1357 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/snower/syncany/blob/9a670b7195305b2db208e7c0de0766a3d2494cbc/syncany/database/__init__.py

    https://github.com/snower/syncany/blob/72191e1f681920506155facfffaeb51846f260c4/syncany/database/__init__.py

    上面是优化后的懒加载,下面的是全局一次性导入,测试结果,修改后的按需加载需要近 400 毫秒,而全局一次性导入的只需要不到 20 毫秒,之所以按需导入是因为一次只使用其中两三个数据库类型,确定不是 if 多的问题,python 性能再慢,这么点判断也不需要几百毫秒,确定就是导入过程不一样加载慢

    更不明所以的是比如单独导入 openpyxl 也需要近四百毫秒。。
    第 1 条附言  ·  2021-03-17 12:36:16 +08:00
    好吧,想了下似乎全局导入的时候一开始就做了,之后才到自己写的代码才开始计算时间,所以完全是因为全局导入的时候没把导入时间算进去,此贴已结,就感觉不可能存在违法常规的情况存在,原来又是自己坑自己
    4 条回复    2021-03-17 14:43:36 +08:00
    noqwerty
        1
    noqwerty  
       2021-03-17 12:17:24 +08:00
    印象里 Python 对 import 过的包本身就是有缓存的,我猜你可能在其他部分里已经导入过这些包了
    sujin190
        2
    sujin190  
    OP
       2021-03-17 12:34:23 +08:00
    @noqwerty #1 这个我知道,但是统计的是程序启动退出的时间才有这个疑问

    不过我又想了下,似乎全局导入的时候是一开始就做的,还没到我计算时间那就导入完成了,所以就算不到导入的时间
    abersheeran
        3
    abersheeran  
       2021-03-17 12:49:27 +08:00
    Python 是一个很“愚蠢”的语言,如果你在函数里写 import,那么每次执行这个函数它都会真的执行这条语句,虽然 import 有缓存,但是也会影响速度的(一点点)。
    sujin190
        4
    sujin190  
    OP
       2021-03-17 14:43:36 +08:00
    @abersheeran #3 但是能这么干自然是因为这些程序每次启动只用其中几个,并且只执行一次,然后命令行程序又会频繁执行,所以还是提高性能十倍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1223 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:10 · PVG 02:10 · LAX 10:10 · JFK 13:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.