我正在使用南巴来开发我的软件包,并且实际上可以在计算中获得加速的次数。现在我面临的问题是,当我在命令行中运行包时
python my_package_name.py
在进口过程中花费了很多时间。为了演示这一点,我使用-X importtime
进行测试:
python -X importtime test_my_package.py
研究结果如下:
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行),所以我删除了那些导入时间较短的代码,但在导入numba
、numpy
和scipy
时保留了一些时间,并将其作为基准测试。显然,my_package
中模块的导入时间非常大,甚至比my_package
(即my_package.utilities
)还要多。这些模块包含我为使用numba.njit
加速计算而实现的所有函数,即使用decolarator @numba.njit
实现的函数。
与导入Python的内置模块相比,导入所有其他模块是非常正常的,因此我怀疑大量导入时间是由于导入这些函数以进行numba
编译(通过@numba.njit
)。实际上,当我在模块@numba.njit
中注释掉一些my_package.utilities
解码器以使它们成为正常的python函数时,导入时间大大缩短了:
import time: 1921836 | 2647152 | my_package.utilities
有什么办法可以让我改进吗?
发布于 2022-09-01 11:05:10
您可以缓存njit
函数:
@numba.njit(cache=True)
,它将在下次运行程序时重新加载已编译的函数。
但是,如果需要进行更改,删除缓存的函数可能会有些棘手。
https://stackoverflow.com/questions/73568079
复制相似问题