【发布时间】:2016-11-19 22:57:54
【问题描述】:
我正在尝试使multiprocessing.Pool 方法起作用。它启动并显示所有核心都处于活动状态,尽管最终只是停滞不前而没有完成。
为了解决这个问题,我首先尝试使用一个简单的for 循环,并且成功了(下面的方法 1)。我还尝试使用multiprocessing.Process 方法,该方法也有效(下面的方法2)。
但是,方法 3(如下)只是挂起。在实现multiprocessing.Pool 方法时我可能会出错在哪里?
import arcpy, os, glob, multiprocessing
# Method 1 works
inws = r'C:\temp\raster_data'
rasters = glob.glob(os.path.join(inws, "*.tif"))
def worker(raster):
arcpy.arcpy.BuildRasterAttributeTable_management(raster)
arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)
for raster in rasters:
worker(raster)
# Method 2 works
def mp_worker(raster):
arcpy.arcpy.BuildRasterAttributeTable_management(raster)
arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)
if __name__ == '__main__':
inws = r'C:\temp\raster_data'
rasters = glob.glob(os.path.join(inws, "*.tif"))
for raster in rasters:
p = multiprocessing.Process(target=mp_worker(raster))
p.start()
p.join()
# Method 3 not working
def mp_worker(raster):
arcpy.arcpy.BuildRasterAttributeTable_management(raster)
arcpy.AddField_management(raster, "Cover", "TEXT", "", "", 20)
def mp_handler():
p = multiprocessing.Pool(8)
p.map(mp_worker, rasters)
if __name__ == '__main__':
inws = r'C:\temp\raster_data'
rasters = glob.glob(os.path.join(inws, "*.tif"))
mp_handler()
【问题讨论】:
-
我不确定它是否与您遇到的问题有关,但您的“方法 2”代码不会进行任何并行处理,因为您在开始之前
joining 每个进程下一个。要使其并行运行,您需要在单独的循环中执行join调用。
标签: windows python-2.7 multiprocessing python-multiprocessing pool