我正在处理一个多处理示例(An introduction to parallel programming)。我修改了Pool Class示例以满足我的特定需求 - 将一束栅格与研究区多边形平行剪切。另一方面,脚本完成并打印“处理完成”。不利的一面是,没有产生输出。我怀疑我在`pool.apply_async'函数中有一些程序错误。为什么这个脚本没有产生任何结果?如何并行剪切光栅?
import arcpy, os
import multiprocessing as mp
arcpy.env.workspace = r'F:\temp\inws'
outws_utm11 = r'F:\temp\outws'
clipper_utm11 = r'F:\temp\some_polygon.shp'
rasters = arcpy.ListRasters()
pool = mp.Pool(processes=4)
def clip_raster(clipper, outws, raster):
arcpy.Clip_management(raster, "#", os.path.join(outws, raster), clipper, nodata_value = 0, clipping_geometry = "ClippingGeometry")
[pool.apply_async(clip_raster, args=(clipper_utm11,outws_utm11, ras)) for ras in rasters]
print "Processing complete."
我很欣赏这个解释。这是有道理的,尽管看起来代码将CPU限制在〜35%左右,并且挂在那里。没有输出产生。我想知道这是否可能是由于'clip_raster()'函数中一个未定义的'raster'变量造成的?我不确定代码如何将'rasters'列表中的项目并行传递给函数? – Borealis
您是否确认过您的'clip_raster'函数实际上只能在一个项目上正常工作,而无需首先使用任何多处理?如果你已经这样做了,试着将函数的整个主体封装在一个try/except块中,它捕获所有的异常并将一个回溯写入一个文件。如果创建了一个文件,那么你知道你的函数抛出异常,并且文件中的回溯应该指向它。 – skrrgwasme