首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python numba编译函数导入非常慢

python numba编译函数导入非常慢
EN

Stack Overflow用户
提问于 2022-09-01 10:44:55
回答 1查看 69关注 0票数 -1

我正在使用南巴来开发我的软件包,并且实际上可以在计算中获得加速的次数。现在我面临的问题是,当我在命令行中运行包时

代码语言:javascript
运行
复制
python my_package_name.py

在进口过程中花费了很多时间。为了演示这一点,我使用-X importtime进行测试:

代码语言:javascript
运行
复制
python -X importtime test_my_package.py

研究结果如下:

代码语言:javascript
运行
复制
import time: self [us] | cumulative | imported package
...
import time:      2422 |       3620 |               numpy.core._multiarray_umath
import time:       425 |        425 |                   numpy.compat._inspect
import time:        62 |         62 |                       errno
import time:       439 |        439 |                         urllib
import time:      1199 |       1638 |                       urllib.parse
import time:      1036 |       2735 |                     pathlib
...
import time:      1408 |       2748 |                     pickle
...
import time:     15060 |      24697 |           numpy.core._add_newdocs_scalars
...
import time:      4627 |     111112 |       numpy
...
import time:      1043 |      31561 |           numba.core.config
...
import time:      1111 |       5296 |                 numba.core.errors
import time:       434 |       5729 |               numba.core.types.common
import time:       566 |        566 |                   numba.core.typeconv.castgraph
import time:       379 |        944 |                 numba.core.typeconv
import time:       331 |        331 |                   numba.core.consts
import time:      1104 |       1435 |                 numba.core.ir
import time:      1083 |       3461 |               numba.core.types.misc
import time:      1293 |      10483 |             numba.core.types.containers
import time:      2129 |       2129 |               logging
import time:      1775 |       3904 |             numba.core.types.functions
...
import time:      9340 |       9340 |             scipy._distributor_init
import time:      1915 |       1915 |             scipy._lib._pep440
import time:       562 |        562 |               scipy._lib._ccallback_c
import time:       952 |       1513 |             scipy._lib._ccallback
import time:      2882 |      17989 |           scipy
import time:      3957 |     211268 |         numba
...
import time:  13506351 |   13834005 |       my_package.utilities
...
import time:   3029710 |    3029710 |       my_package.extract_features
import time:   4805845 |    4805845 |       my_package.fast_annotate_spectrum
...
import time:    345628 |     345628 |         my_package.modification_correction
...
import time:   3769461 |    3769461 |             my_package.xxx.fast_annotate_spectrum
...
import time:   4831766 |    4847170 |               my_package.xxx.utilities
...
import time:   9825949 |    9825949 |             my_package.machinelearning.utilities
...
import time:     55041 |     102863 |                                   scipy.stats._continuous_distns
...
import time:   1178353 |   11814805 |           my_package.machinelearning.randomforest
...
import time:   2767857 |    2767857 |       my_package.retrieval_utilities

这个列表非常长(>1300行),所以我删除了那些导入时间较短的代码,但在导入numbanumpyscipy时保留了一些时间,并将其作为基准测试。显然,my_package中模块的导入时间非常大,甚至比my_package(即my_package.utilities)还要多。这些模块包含我为使用numba.njit加速计算而实现的所有函数,即使用decolarator @numba.njit实现的函数。

与导入Python的内置模块相比,导入所有其他模块是非常正常的,因此我怀疑大量导入时间是由于导入这些函数以进行numba编译(通过@numba.njit)。实际上,当我在模块@numba.njit中注释掉一些my_package.utilities解码器以使它们成为正常的python函数时,导入时间大大缩短了:

代码语言:javascript
运行
复制
import time:   1921836 |    2647152 |       my_package.utilities

有什么办法可以让我改进吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 11:05:10

您可以缓存njit函数:

代码语言:javascript
运行
复制
@numba.njit(cache=True)

,它将在下次运行程序时重新加载已编译的函数。

但是,如果需要进行更改,删除缓存的函数可能会有些棘手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73568079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档