gpt4 book ai didi

python-3.x - 使用 python-opencv 多线程时是否释放了 GIL?

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:24 25 4
gpt4 key购买 nike

我正在使用 numpy 和 opencv 在 python3 中对大量图像进行大量图像处理。我知道 python 有这个 GIL 可以防止两个线程同时运行。在 Google 上快速搜索告诉我,不要在 Python 中使用线程来执行 CPU 密集型任务,仅将它们用于 I/O 或将文件保存到磁盘、数据库通信等。我还读到 GIL 在使用 C 扩展时被释放。由于 numpy 和 opencv 都是 C 和 C++ 扩展,我感觉 GIL 可能会发布。我不确定,因为图像处理是一项 CPU 密集型任务。我的直觉是正确的还是我更适合使用多处理?

最佳答案

要提前回答,这取决于您使用的功能。

证明函数是否释放 GIL 的最有效方法是检查相应的源代码。检查文档也有帮助,但通常根本没有记录。是的,这很麻烦。

http://scipy-cookbook.readthedocs.io/items/Multithreading.html

[...] numpy code often releases the GIL while it is calculating, so that simple parallelism can speed up the code.

每个项目都可能使用自己的宏,所以如果您熟悉默认宏,如 Py_BEGIN_ALLOW_THREADS在 C Python API 中,您可能会发现它们被重新定义了。例如在 Numpy 中,它将是 NPY_BEGIN_THREADS_DEF 等。

关于python-3.x - 使用 python-opencv 多线程时是否释放了 GIL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com