我使用的是numba's @jitclass,我想减少编译时间.

例如(我的实际班级要大得多):

@jitclass
class State:
    a: int
    b: int

    def __init__(self):
        a = 0
        b = 0

    def update(self, x: int):
        self.a += x
        self.b -= x

我try 将cache参数添加到@jitclass,但似乎不受支持.

@jitclass(cache=True)
class State:
    ...

我还试图改变我的类,只是为了保存数据,并用@njitcache编译所有方法:

@jitclass
class State:
    a: int
    b: int

    def __init__(self):
        a = 0
        b = 0

@njit(cache=True)
def update(state: State, x: int):
    state.a += x
    state.b -= x

但这似乎让编译时间变得更糟.我的猜测是,因为State没有被缓存,所以它每次都编译,然后依赖函数需要编译.

是否有任何解决方案可以减少编译时间?

推荐答案

这是一个known opened issue,看起来这个问题不会很快得到解决(因为这个问题至少在6年前就有报道).您可以在以下问题中获得相关信息:#1#2#3.jitclass当前无法在解释器重新启动时安全缓存,这是一个相当严重的问题.引用一位开发商的话:

请注意,如果这个酸洗确实有效,那么缓存的字节码将是invalid across interpreter restarts,因为它包含一个hard-coded memory address,表示该类型曾经所在的位置.

使用structrefs似乎是一种变通方法(尽管不是很好).如果可能的话,重新构造代码以便不使用jitclass是一个更好的 Select .请注意,到目前为止,jitclass和structref是experimental个特性.

Python相关问答推荐

Python -Polars库中的滚动索引?

如何在Python中使用io.BytesIO写入现有缓冲区?

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

Python会扔掉未使用的表情吗?

通过优化空间在Python中的饼图中添加标签

DataFrame groupby函数从列返回数组而不是值

如何在箱形图中添加绘制线的传奇?

max_of_three使用First_select、second_select、

如何获取TFIDF Transformer中的值?

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

ODE集成中如何终止solve_ivp的无限运行

Django RawSQL注释字段

Polars将相同的自定义函数应用于组中的多个列,

剪切间隔以添加特定日期

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

关于两个表达式的区别

根据Pandas中带条件的两个列的值创建新列

如何在Pandas中用迭代器求一个序列的平均值?

与同步和异步客户端兼容的Python函数