Python通过多处理将图像读取到numpy数组

Python通过多处理将图像读取到numpy数组,python,multithreading,numpy,multiprocessing,Python,Multithreading,Numpy,Multiprocessing,我正在开发一个python程序,它可以批量读取大量图像(比如500个图像)并将其存储在numpy数组中 现在它是单线程的,IO非常快,需要花费大量时间的部分是创建numpy数组并在上面做一些事情 通过使用多处理模块,我能够在其他进程中读取和创建数组。但是我在让主线程访问这些数据时遇到了问题 我试过: 1:使用多处理。队列:非常慢,我认为这是腌菜和不腌菜浪费了很多时间。对大型numpy阵列进行酸洗和解酸洗需要相当长的时间 2:使用Manager.list():比队列快,但当尝试在主线程中访问它时,

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

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

通过使用多处理模块,我能够在其他进程中读取和创建数组。但是我在让主线程访问这些数据时遇到了问题

我试过:

1:使用多处理。队列:非常慢,我认为这是腌菜和不腌菜浪费了很多时间。对大型numpy阵列进行酸洗和解酸洗需要相当长的时间

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


有什么建议吗?谢谢。

看来我得回答我自己的问题了

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

详情请浏览

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

这种方法对我来说非常有效,它将我的程序速度提高了10倍

因为我正在处理大量数据,所以酸洗不是我的选择

最关键的代码是:

shared_arr = mp.Array(ctypes.c_double, N)
arr = tonumpyarray(shared_arr)

一批图像需要多少内存?如果需要大量内存,请考虑使用+=和类似的东西来覆盖内存部分,因为a=a+B比a+=B花费的时间要多得多,当a和B变大时(当阵列变大时,内存布局变得更重要)@usedTheDeathStar每个批大约需要300 MB。谢谢你的提示,我已经避免了那样的手术。