我有一个这样的测试代码:
import numpy as np
from numba import njit, prange
import random
def func():
a = np.empty(0)
for i in range(10):
b = np.arange(np.random.randint(10))
a = np.concatenate((a, b))
print(len(b), ' / ', len(a))
func()
它按预期工作:
3 / 3
6 / 9
5 / 14
8 / 22
9 / 31
6 / 37
9 / 46
5 / 51
3 / 54
9 / 63
如果我通过添加@njit(parallel=True)
装饰器使用Numba进行编译,它将停止工作,因为Numba将导致问题的循环并行化:
2 / 0
1 / 0
2 / 0
7 / 0
0 / 0
3 / 0
2 / 0
5 / 0
7 / 0
2 / 0
在我的实际代码中,这个函数中还有另一个循环,它使用了prange,所以我希望整个函数的parallel=True。但我不想把它用于这个循环。
如何防止这种情况发生?
我最终将这部分代码从具有parallel=True
的@njit
’ed函数中分离出来,在这个被分解的函数中,我使用了@njit
,但留下了parallel=False
这是为我做的。