我尝试使用多处理来加快代码的性能,同时也使用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
目前没有回答
相关问题 更多 >
编程相关推荐