多处理的Numba jitclass

2024-09-28 19:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用多处理来加快代码的性能,同时也使用numba jitclass。jitted函数中包含jitclass实例,该函数是多处理池的目标。 运行代码时,收到以下错误消息:

cPickle.PicklingError: Can't pickle <class 'numba.jitclass.boxing.MyClass'>: attribute lookup numba.jitclass.boxing.MyClass failed

我尝试在python3中运行代码,它也有相同的问题:

^{pr2}$

我甚至试过了”病理学.多处理或“multiprocessing_-on-dill”模块代替了原来的“multiprocessing”模块,但两个模块都不起作用。 我怎么处理这个问题?提前谢谢。在

下面是我的测试代码。在

import numba as nb
from scipy.integrate import odeint
import multiprocessing as mp

@nb.jit(nopython=True)
def odeSystem(x, t, a):
    v = a.func(x, t)
    return 1-x+v

@nb.jitclass([])
class B(object):
    def __init__(self):
        pass

spec = [("b", B.class_type.instance_type),("c", nb.f8)]
@nb.jitclass(spec)
class A(object):
    def __init__(self, b, c):
        self.b = b
        self.c = c

    def func(self, x, t):
        return 0

def odeSolve(x, t, a):
    sol = odeint(odeSystem, x, t, args=(a,))
    return sol

if __name__ == "__main__":
    a = A(B(), 3)

    from functools import partial
    initialx = range(10)
    ode = partial(odeSolve, t=range(0, 10), a=a)
    nProcess = 1
    pool = mp.Pool(nProcess)
    sol = pool.map(ode, initialx)
    print sol

如果我运行这个,我得到一个错误消息:

cPickle.PicklingError: Can't pickle <class 'numba.jitclass.boxing.A'>: attribute lookup numba.jitclass.boxing.A failed

Tags: 模块函数代码importselfreturndef错误