在ArcGIS中优化Multcore处理的方法


12

我对学习方法有兴趣,以充分利用台式计算机上可用的多核处理能力。Arc指出,后台地理处理允许用户利用多个核心,但是,任务本质上必须排队等待上一个任务完成。

是否有人在Arc / Python中开发了并行或多线程地理处理方法?是否存在阻止单个任务进行多核处理的硬件瓶颈?

尽管不是地理处理示例,但我在Stackoverflow中找到了一个有趣的示例,引起了我的兴趣:

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned

1
以我的Arc经验,它几乎总是归结为以下两种情况:1)将数据拆分为{core}块,进行处理和重新组装,或者2)将所有内容读入内存并让x API处理线程。注意this is not meant to discourage
valve伦敦2012年

谢谢valveLondon。也许更新的Ivy Bridge技术和Kepler GPU将允许使用更复杂的处理方法。
亚伦

这是指向ESRIs分析和地理处理团队的产品工程师的有关python多重处理的有用博客的链接。 blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

Answers:



11

以我的经验,最大的问题是管理稳定性。如果您在一个晚上进行六周的处理,您还将有六周的莫名其妙的错误和错误。

另一种方法是开发独立的脚本,这些脚本可以独立运行并在不引起问题的情况下失败:

  • 将数据拆分为单个内核可以在不到20分钟的时间内处理的数据块(任务)。
  • 构建一个独立的Arcpy脚本,该脚本可以处理单个任务并且尽可能简单(工作人员)。
  • 开发一种运行任务的机制。存在许多预先存在的python解决方案。另外,您也可以使用简单的队列制作自己的队列。
  • 编写一些代码以验证任务已完成。这可以像检查已写入输出文件一样简单。
  • 将数据合并在一起。

1
我发现这种方法(可以包括使用多处理模块)是一个很好的方法-如果您同时运行同一功能的多个副本,则某些扩展(例如空间分析器)将无法很好地工作。您所描述的允许用户控制的排队形式(即避免同时调度这些任务或避免出于文件锁定的原因而一次使用同一地理数据库)将是最好的。
nicksan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.