我最近尝试使用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)
Run Code Online (Sandbox Code Playgroud)
当我调用myfunc()代码时,我得到的结果比不使用numba的速度快得多.但是,当我打电话给myfunc2我时,我看到了这个错误:
File "~/.spyder-py3/temp.py", line 22, in <module>
myfunc2()
RuntimeError: missing Environment
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法为什么从insdie调用一个函数另一个在这种情况下不起作用?
v0.39 中引入了修复。根据发行说明:
PR #2986:修复环境传播
有关更多详细信息,请参阅github pull #2986 。
这是一个已知的问题。如github 问题 #2411中所述:
似乎环境指针没有在 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |