- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的项目中有几个模块,每个模块都包含一些 numba
函数。我知道在第一次导入时,函数会被编译。我现在才注意到的是,即使我只从模块中导入一个函数,似乎所有函数都会被编译,因为导入花费的时间相同。
我想为此实现一种更细粒度的方法,因为对于某些应用程序,您实际上只需要一个函数,因此编译所有函数是浪费时间。
为此,我将函数拆分为单独的模块,如下所示:
Project/
|--src/
| |-- __init__.py
| |-- fun1.py
| |-- fun2.py
| |-- fun3.py
| |-- fun4.py
| |-- ...
__init__.py
包括
from .fun1 import fun1
from .fun2 import fun2
...
因此它们可以像 from src import fun1
一样导入。
这似乎工作正常,但在导入级别有一些重复,例如每个函数都需要 from numba import jit
,其中一些需要 from numpy import zeros
等等。
所以我的问题是这是否是一个好的方法,或者是否有更好的方法来打包许多 numba
函数。
将所有导入语句放入 __init__.py
显然意味着一旦导入一个函数,所有函数都会被编译 - 所以根本没有任何好处。
我仍然可以导入类似的功能
from src.fun1 import fun1
这似乎有效。但是语法有点笨拙。
最佳答案
I know that on first import the functions get compiled.
这不一定是真的。 Eager compilation仅当使用显式签名声明函数时才会发生。
声明带有显式签名的函数有两个后果:
如果您不需要禁止额外的特化,您可以简单地删除函数签名,它们将在每个特化的第一次执行时编译。
您可以通过在 numba.core.dispatcher.Dispatcher.compile()
方法中放置一个断点来检查函数何时被编译。
关于python - 将 numba 函数拆分为项目中的单独模块以进行打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67281045/
我是一名优秀的程序员,十分优秀!