栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么numpy计算不受全局解释器锁定的影响?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么numpy计算不受全局解释器锁定的影响?

许多 numpy计算不受GIL的影响,但不是全部。

在不需要Python解释器的代码(例如C库)中,可以专门释放GIL-允许依赖于解释器的其他代码继续运行。在Numpy
C代码库中,宏

NPY_BEGIN_THREADS
NPY_END_THREADS
用于分隔允许GIL释放的代码块。您可以在numpy来源的搜索中看到这些内容。

该NumPy的C
API文档,
对线程支持的更多信息。注意额外的宏

NPY_BEGIN_THREADS_DESCR
NPY_END_THREADS_DESCR
以及
NPY_BEGIN_THREADS_THRESHOLDED
其处理条件GIL释放,依赖于阵列
dtypes
和线圈的尺寸。

最核心的功能释放GIL
-例如通用功能(ufunc)这样做所描述的:

只要不涉及任何对象数组,就在调用循环之前释放Python全局解释器锁(GIL)。如有必要,可以重新获取它以处理错误情况。

关于您自己的代码,可以使用NumPy的源代码。检查以上宏所使用的功能(以及它们调用的功能)。还要注意的性能优势在很大程度上取决于
如何长 的GIL被释放-如果你的代码是不断输入/输出的Python的下降,你不会看到多大的改善。

另一个选择是对其进行测试。但是,请记住,使用条件GIL宏的函数可能会在大小数组上表现出不同的行为。因此,使用小型数据集进行的测试可能无法正确表示较大任务的性能。

官方Wiki上提供了有关numpy并行处理的其他信息,以及有关Programmers.SE的有关Python
GIL的有用文章。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号