【发布时间】:2021-03-17 15:06:58
【问题描述】:
我有许多函数,我寻求支持单线程和多线程执行,这使我的代码行数增加,产生冗余重复:
@jit(nopython=True, cache=True)
def fn1(x):
for i in range(len(x)):
# [code body]
@jit(nopython=True, cache=True, parallel=True)
def fn1_par(x):
for i in prange(len(x)):
# [code body]
两者的代码体完全相同,唯一不同的是@jit(parallel=True) 和range -> prange。有没有办法让我在 single 函数中表达这个逻辑,同时保留 cache=True 的好处?
注意:使用 'wrapper wrapper'(osvil 的回答)的解决方法因 cache=True 而失败;第一次调用的配置保持不变(例如,第一个函数的 parallel=False 将覆盖第二个函数的 parallel=True)。更改包装函数的 __name__ 无济于事。已打开Issue。
【问题讨论】:
-
无需将
prange替换为range。当使用parallel=False调用时,numba 将自动将prange替换为range,允许您使用@osvil 的答案中概述的方法