从批处理文件运行多处理arcpy python
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从批处理文件运行多处理arcpy python相关的知识,希望对你有一定的参考价值。
所以我正在尝试将多处理功能添加到通过批处理文件运行的python脚本中。我在运行时不断收到回溯类型错误,似乎无法解决问题。我可以解决的最大错误是它说Medcen函数不存在。但我认为这就是def的目的(见下文)。
编辑
已编辑代码以反映建议后的当前状态。
所以我现在看到我的问题的一部分是我正在尝试将for循环转换为多进程。我可以通过x = x + 1来做一个递增变量来修改输出文件名,我现在需要找到另一种方法来做到这一点。但这不是整个问题。我试图使用枚举,但这也不起作用。
批处理文件代码:
C:PathToArcPython2.7-64bit C:PathtoScript3
脚本3代码多处理尝试:
import arcpy
import os
import fnmatch
import sys
import multiprocessing
#==============================================================================
working_dir = r'E:PathToDir'
output_dir = os.path.join(working_dir, 'Results')
if not os.path.isdir(output_dir):
os.mkdir(output_dir)
#==============================================================================
global input_files5
global input_files6
input_files5 = []
input_files6 = []
#==============================================================================
for r, d, f in os.walk(output_dir):
for inFile in fnmatch.filter(f, '*Processed.shp'):
input_files5.append(os.path.join(r, inFile))
global num
num = enumerate([0,1])
def Medcen(file):
name = output_dir + "\" + "XT_ID_" + str(num) + "MedCen.shp"
arcpy.MedianCenter_stats(file, name,"","", "Field1;Field2")
input_files6.append(name)
print "Med Cen " + str(num)
def MCprocess():
pool = multiprocessing.Pool(processes=4)
pool.map(Medcen, input_files5)
if __name__ == '__main__':
working_dir = r'E:PathToDir'
output_dir = os.path.join(working_dir, 'Results')
input_files5 = []
input_files6 = []
for r, d, f in os.walk(output_dir):
for inFile in fnmatch.filter(f, '*Processed.shp'):
input_files5.append(os.path.join(r, inFile))
MCprocess()
堆栈跟踪错误
Traceback (most recent call last):
File "E:ProcessingEnvironmentSDv2.0CODEStrikeDipPart3ArcGIS.py", line 55, in <module>
MCprocess()
File "E:ProcessingEnvironmentSDv2.0CODEStrikeDipPart3ArcGIS.py", line 41, in MCprocess
pool.map(Medcen, input_files5)
File "C:Python27ArcGISx6410.5libmultiprocessingpool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "C:Python27ArcGISx6410.5libmultiprocessingpool.py", line 567, in get
raise self._value
ExecuteError: ERROR 000210: Cannot create output
E:ProcessingEnvironmentSDv2.0IntermediateResultsXT_ID_<enumerate object at 0x0000000012CCB678>MedCen.shp
Failed to execute (MedianCenter).
答案
问题是尝试迭代与for循环相同。相反,我决定使用原始文件名来完成它,这些文件名在处理的这个阶段已经是唯一的。相关代码如下。
def Medcen(file):
filename = str(file)
filename = filename.split('\')
filename = filename[-1]
filename = filename.strip('Processed.shp')
name = output_dir + "\" + str(filename) + "MedCen.shp"
arcpy.MedianCenter_stats(file, name,"","", "Field1;Field2")
input_files6.append(name)
print "Med Cen " + str(filename)
以上是关于从批处理文件运行多处理arcpy python的主要内容,如果未能解决你的问题,请参考以下文章
Python遥感图像处理应用篇(十三):Arcpy批量计算绿度归一化植被指数GNDVI
Python遥感图像处理应用篇(十三):Arcpy批量计算绿度归一化植被指数GNDVI
Python遥感图像处理应用篇:Arcpy遥感图像LWSI指数计算批量处理