从batch fi运行多处理arcpy python

2024-09-30 02:15:40 发布

您现在位置: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:\ProcessingEnvironment\SDv2.0\CODE\StrikeDipPart3ArcGIS.py", line 55, in <module>
    MCprocess()
  File "E:\ProcessingEnvironment\SDv2.0\CODE\StrikeDipPart3ArcGIS.py", line 41, in MCprocess
    pool.map(Medcen, input_files5)
  File "C:\Python27\ArcGISx6410.5\lib\multiprocessing\pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "C:\Python27\ArcGISx6410.5\lib\multiprocessing\pool.py", line 567, in get
    raise self._value
ExecuteError: ERROR 000210: Cannot create output 
E:\ProcessingEnvironment\SDv2.0\Intermediate\Results\XT_ID_<enumerate object at 0x0000000012CCB678>MedCen.shp
Failed to execute (MedianCenter).

Tags: pathinimportforinputoutputosdir
1条回答
网友
1楼 · 发布于 2024-09-30 02:15:40

问题是尝试以与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)

相关问题 更多 >

    热门问题