使用python-opencv多线程时是否发布了GIL?

时间:2018-04-25 04:21:52

标签: python-3.x numpy opencv gil

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

1 个答案:

答案 0 :(得分:0)

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

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

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

  

[...] numpy代码经常在计算时释放GIL,   这样简单的并行性就可以加速代码。

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