我正在尝试部署一个具有多个numba.njit函数的代码库cache=True。
它在本地运行良好(Mac OS X 10.12.3),但在远程机器(AWS 上的 Ubuntu 14.04)上我收到以下错误:
RuntimeError at /portal/
cannot cache function 'filter_selection':
no locator available for file:
'/srv/run/miniconda/envs/mbenv/lib/python2.7/site-packages/mproj/core_calcs/filter.py'
Run Code Online (Sandbox Code Playgroud)
我查看了 numba 代码库,看到了这个文件:https : //github.com/numba/numba/blob/master/numba/caching.py
似乎以下函数返回 None 而不是定位器,以引发此异常
cls.from_function(py_func, source_path)
猜测这是写入pycache文件夹的权限,但我在 numba 文档中没有看到指定缓存文件夹位置(CACHE_DIR)的方法。
以前有没有人遇到过这个问题,如果有,建议的解决方法是什么?
我有一个用 numba 编写的相当大的代码库,我注意到当为另一个文件中调用另一个 numba 编译函数的函数启用缓存时,当被调用函数发生更改时,不会拾取被调用函数中的更改。当我有两个文件时会发生这种情况:
测试文件2:
import numba
@numba.njit(cache=True)
def function1(x):
return x * 10
Run Code Online (Sandbox Code Playgroud)
测试文件:
import numba
from tests import file1
@numba.njit(cache=True)
def function2(x, y):
return y + file1.function1(x)
Run Code Online (Sandbox Code Playgroud)
如果在 jupyter notebook 中,我运行以下命令:
# INSIDE JUPYTER NOTEBOOK
import sys
sys.path.insert(1, "path/to/files/")
from tests import testfile
testfile.function2(3, 4)
>>> 34 # good value
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改然后将 testfile2 更改为以下内容:
import numba
@numba.njit(cache=True)
def function1(x):
return x * 1
Run Code Online (Sandbox Code Playgroud)
然后我重新启动 jupyter notebook 内核并重新运行 notebook,我得到以下信息
import sys
sys.path.insert(1, "path/to/files/")
from tests import testfile
testfile.function2(3, 4) …Run Code Online (Sandbox Code Playgroud)