import 懒加载为啥性能低

2021-03-17 11:47:12 +08:00
 sujin190
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 也需要近四百毫秒。。
2647 次点击
所在节点    Python
4 条回复
noqwerty
2021-03-17 12:17:24 +08:00
印象里 Python 对 import 过的包本身就是有缓存的,我猜你可能在其他部分里已经导入过这些包了
sujin190
2021-03-17 12:34:23 +08:00
@noqwerty #1 这个我知道,但是统计的是程序启动退出的时间才有这个疑问

不过我又想了下,似乎全局导入的时候是一开始就做的,还没到我计算时间那就导入完成了,所以就算不到导入的时间
abersheeran
2021-03-17 12:49:27 +08:00
Python 是一个很“愚蠢”的语言,如果你在函数里写 import,那么每次执行这个函数它都会真的执行这条语句,虽然 import 有缓存,但是也会影响速度的(一点点)。
sujin190
2021-03-17 14:43:36 +08:00
@abersheeran #3 但是能这么干自然是因为这些程序每次启动只用其中几个,并且只执行一次,然后命令行程序又会频繁执行,所以还是提高性能十倍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX