我最近尝试使用numba在python中加速部分代码。我试图从函数2内部运行函数1,而它们都是用numba编译但是它不起作用。这是我的代码:
import numba as nb
from math import acos
from time import time
@nb.jit("void()")
def myfunc():
s = 0
for i in range(10000000):
s += acos(0.5)
print('The sum is: ', s)
@nb.jit("void()")
def myfunc2():
myfunc()
tic = time()
myfunc2()
toc = time()
print(toc-tic)
当我打电话给myfunc()
代码时,我得到的结果比我不使用numba的速度快得多。但是,当我拨打myfunc2
时,我看到了这个错误:
File "~/.spyder-py3/temp.py", line 22, in <module>
myfunc2()
RuntimeError: missing Environment
任何人都有任何想法为什么从insdie调用一个函数的另一个在这种情况下不起作用?
答案 0 :(得分:3)
v0.39中引入了一个修复程序。根据{{3}}:
PR#2986:修复环境传播
有关详细信息,请参阅Release Notes。
这是一个已知问题。如github pull #2986:
中所述似乎环境指针未正确传递 nopython功能。
修改如下以从print()
函数中移除numba
应解决此问题:
import numba as nb
from math import acos
from time import time
@nb.jit("void()")
def myfunc():
s = 0
for i in range(10000000):
s += acos(0.5)
return s
@nb.jit("void()")
def myfunc2():
return myfunc()
tic = time()
x = myfunc2() # 10471975.511390356
toc = time()
print(toc-tic)