3

我使用 numba 使用 autojit 装饰器来加速我的部分 Python 代码。测试通过并且 %timeit 表明代码确实被加速了。

第一次执行很慢,因为我认为 numba 正在编译代码。说得通。但是当我运行一组测试时,它们运行得非常慢,从我更改前大约 10 秒内的 10 次测试到 117 秒内的相同测试。似乎 numba 必须一次又一次地为每个测试单独编译。

我可以避免这种情况吗?我尝试在setUp函数中运行一个简单的测试,认为可能会为所有测试编译一次函数,但这并没有显着改变运行时间。

4

1 回答 1

1

像这样的东西可能会起作用:

from numba import autojit

def autojit_except_when_unit_testing(func):
    if UNIT_TESTING:
        return func
    return autojit(func)

可能还会碰到 numba 关于缓存的问题,因为这是一个非常重要的用例。我通常会很犹豫在这样不同的环境中运行单元测试和生产代码,但是需要永远运行的单元测试不会经常运行。您几乎可以肯定也应该使用 numba 进行测试,只是少一些。

于 2014-01-26T23:04:26.270 回答