scipy.misc.imread safe/efficient 到 运行 来自多个线程吗?

Is scipy.misc.imread safe/efficient to run from multiple threads?

我已经使用 python 队列设置了一个 producer/consumer 模型。在一位制作人中,我正在使用 scipy.misc.imread 读取图像。

在一个线程中读取图像不够快,读取每张图像大约需要 0.2 秒。从 SSD 读取大约 20MB/秒。

我尝试使用 python 的 threading 模块添加另一个相同的线程。然而,scipy.misc.imread 花费的时间增加了大约两倍,导致 2 个线程读取图像的速度大约与 1 个线程一样快。

我确定我的 SSD 可以处理 40MB/秒的吞吐量,即使是随机读取。 dd 写入测试显示写入速度为 800MB+/秒。

我想知道 scipy.misc.imread 是否作为线程间的临界区运行?我希望 multiprocessing 避免这个问题吗?

scipy.misc.imread 对多线程是安全的,但每次调用都会锁定全局解释器,因此性能不会受益于多线程。

它在多处理中运行良好,没有意外问题。