我编写了一个算法,该算法采用地理空间数据并执行多个步骤。输入数据是大型栅格研究区域(约 1.5 亿像素)的多边形和协变量栅格的 shapefile。步骤如下:
- shapefile 多边形内的采样点
- 对于每个采样点,从协变量栅格中提取值
- 在采样点上建立预测模型
- 提取目标网格点的协变量
- 将预测模型应用于目标网格
- 将预测写入一组输出网格
整个过程需要迭代多次(比如 100 次),但当前每次迭代需要一个多小时的时间进行串行处理。对于每次迭代,最耗时的部分是第 4 步和第 5 步。由于目标网格非常大,我一直在一次处理一个块(比如 1000 行)。
我有一个 6 核 CPU 和 32 Gb RAM,所以在每次迭代中,我尝试使用 Python 的multiprocessing
模块和一个Pool
对象同时处理多个块(步骤 4 和 5),然后写入输出(预测)使用调用全局输出写入函数的回调函数到公共输出网格集。这似乎可行,但并不比串行处理每个块更快(实际上,它可能更慢)。
所以我的问题是,有没有更有效的方法来做到这一点?我对多处理模块的Queue
类感兴趣,但我不确定它是如何工作的。例如,我想知道让一个执行步骤 4 和 5 然后将结果传递到执行步骤 6 的另一个队列是否更有效。或者这甚至是 Queue 的用途吗?
任何指针将不胜感激。