Итак, я пытаюсь добавить возможность многопроцессорности в скрипт Python, который запускается через пакетный файл. Я продолжаю получать ошибку типа трассировки при запуске и, похоже, не могу ее устранить. Максимум, что я могу понять из ошибки, это то, что она говорит, что функция Medcen не существует. Но я думал, что это и было целью защиты (см. ниже).
ИЗМЕНИТЬ
Код был отредактирован, чтобы отразить текущее состояние после предложений.
Итак, теперь я вижу, что часть моей проблемы заключается в том, что я пытаюсь преобразовать цикл for в многопроцессорный. Там, где я мог бы использовать инкрементную переменную через x = x+1 для изменения имен выходных файлов, теперь мне нужно найти другой способ сделать это. Но это еще не вся проблема. Я пытался использовать enumerate, но это тоже не работает.
Код пакетного файла:
C:\PathToArcPython2.7-64bit C:\PathtoScript3
Попытка многопроцессорной обработки кода Script 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 Script(file):
name = output_dir + "\\" + "Prefix" + str(num) + "Script.shp"
arcpy.Tool(file, name,"","", "Field1;Field2")
input_files6.append(name)
print "Script " + str(num)
def MCprocess():
pool = multiprocessing.Pool(processes=4)
pool.map(Script, 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()
StackTraceError
Traceback (most recent call last):
File "Path\To\Script.py", line 55, in <module>
MCprocess()
File "Path\To\Script.py", line 41, in MCprocess
pool.map(Script, 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
Path\To\File\Prefix_<enumerate object at 0x0000000012CCB678>Suffix.shp
Failed to execute (Script).