【发布时间】:2014-12-17 04:39:12
【问题描述】:
我正在处理这个例子:
http://numba.pydata.org/numba-doc/0.15.1/examples.html#multi-threading
它声明:
此时应确保编译了 inner_func,因为编译必须在主线程上进行。在这个例子中就是这种情况,因为我们使用了 jit()。
在示例中似乎对函数调用 jit 可以确保当时的编译。
如果不是在函数上调用 jit 而不是在函数上调用 jit 并将参数类型指定为装饰器,那么多线程示例会起作用吗?我认为这相当于询问函数是否会在定义时与装饰器一起编译。
import numba as nb
import numpy as np
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] + 3.2 * b[i])
restorethread(threadstate)
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
inner_func_nb = nb.jit(signature, nopython=True)(inner_func)
对
import numba as nb
import numpy as np
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
@nb.jit(signature, nopython=True)
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] + 3.2 * b[i])
restorethread(threadstate)
【问题讨论】:
标签: python multithreading jit numba