Skip to main content
 首页 » 编程设计

python之我可以在单元测试的设置阶段编译 numba 吗

2025年05月04日9zdz8207

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

第一次执行很慢,我猜是因为 numba 正在编译代码。说得通。但是,当我运行一组测试时,它们运行极度慢,从我更改之前大约 10 秒的 10 个测试到 117 秒的相同测试。看来 numba 必须一次又一次地编译,分别为每个测试。

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

请您参考如下方法:

这样的事情可能会起作用:

from numba import autojit 
 
def autojit_except_when_unit_testing(func): 
    if UNIT_TESTING: 
        return func 
    return autojit(func) 

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