1

我正在开发一个 python 程序,它批量读取大量图像(比如说 500 张图像)并将其存储在一个 numpy 数组中。

现在它是单线程的,IO 非常快,需要花费大量时间的部分是创建 numpy 数组并在其上做一些事情。

通过使用多处理模块,我可以在其他进程中读取和创建数组。但我有问题让主线程访问这些数据。

我试过了:

1:使用multiprocessing.queues:很慢,相信是pickle和unpickle浪费了很多时间。腌制和解封大型 numpy 数组需要相当长的时间。

2:使用Manager.list():比队列快,但是当尝试在主线程中访问它时,它仍然很慢。即使只是遍历列表并且什么都不做,每个项目也需要 2 秒。我不明白为什么要花这么多时间。

有什么建议么 ?谢谢。

4

1 回答 1

2

看来我必须回答我自己的问题。

我面临的问题可以通过使用带有 numpy 的共享内存来解决。

更多细节可以在

在共享内存中使用 numpy 数组进行多处理

这个想法基本上是在主进程中创建共享内存,并将内存分配给一个numpy数组。稍后在其他过程中,您可以从中读取或写入。

这种方法对我来说效果很好,它将我的程序加速了 10 倍。

因为我正在处理大量数据并且酸洗不是我的选择。

最关键的代码是:

shared_arr = mp.Array(ctypes.c_double, N)
arr = tonumpyarray(shared_arr)
于 2013-11-25T23:44:51.180 回答