python - 使用 parallel=True 时如何防止 Numba 并行化特定循环?
问题描述
我有一个像这样的测试代码:
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
如果我通过添加装饰器来使用 Numba 进行编译@njit(parallel=True)
,它会停止工作,因为 Numba 会并行化这个导致问题的循环:
2 / 0
1 / 0
2 / 0
7 / 0
0 / 0
3 / 0
2 / 0
5 / 0
7 / 0
2 / 0
在我的真实代码中,此函数中有另一个使用 prange 的循环,因此我希望在整个函数上使用 parallel=True。但我不希望它用于这个循环。
如何防止这种情况?
解决方案
我最终将这部分代码从具有的@njit
'ed 函数中拆分出来parallel=True
,并且在这个被分解的函数上我使用@njit
但离开了parallel=False
这为我做到了。
推荐阅读
- java - 我试图在循环中包含一个计数器变量
- wordpress - Wordpress 粘性帖子粘贴在主博客页面上,但不在类别页面中(Timber Twig 模板)
- hadoop - 如何在 HDFS 中获取用户主目录的路径
- python - 从命令行参数获取元组
- python - Reconstruct / explode list array into multiple rows for output to csv
- google-cloud-datastore - GCP 数据存储区导出是否读取所有实体
- sql - 从一个子查询更新两行
- ag-grid - 我们可以在一列中同时使用 agTextColumnFilter 和 agSetColumnFilter 吗?
- api - 如何测试从 Flutter 应用程序到 localhost 服务的 api 调用?
- java - 如何从 Java RestApi Spring 3 IE11 接收 JS 中的事件?