Estoy intentando reducir el tiempo de procesamiento de arcpy utilizando la caja de herramientas de multiprocesamiento de python. Usando el ejemplo de http://wltrimbl.github.io/2014-06-10-spelman/intermediate/python/04-multiprocessing.html como directriz.
Básicamente, estoy tratando de seleccionar todas las pistas (características de punto) con un trackID específico (en el campo 'pista'), darle un buffer y extraer todas las características de carretera dentro de ese buffer como preprocesamiento para otro script. Pero el conjunto de datos es tan grande que me llevaría una semana ejecutarlo.
Ahora tengo el siguiente código, pero estoy teniendo un problema con el programa se ejecuta normalmente, pero no la salida de los archivos en Tracks.gdb. ¿Alguien tiene algún consejo?
import arcpy
from arcpy import env
import multiprocessing
def MyFunction(i):
TrackFeatureOut = "C:\tryingOut\Tracks.gdb\Track_" + str(i)
RoadFeatureOut = "C:\tryingOut\Tracks.gdb\Road_" + str(i)
if not (RoadFeatureOut in featureclasses):
BufferFeatureOut = "C:\tryingOut\Temporary.gdb\Buffer_" + str(i)
Query = "track =" + str(i)
arcpy.Select_analysis("C:\tryingOut\Input.gdb\Tracks", TrackFeatureOut, Query)
arcpy.Buffer_analysis(TrackFeatureOut, BufferFeatureOut, "100 Meters")
arcpy.Clip_analysis("C:\tryingOut\Input.gdb\Roads", BufferFeatureOut, RoadFeatureOut)
if __name__ == '__main__':
global featureclasses
env.workspace = "C:\tryingOut\Tracks.gdb"
featureclasses = arcpy.ListFeatureClasses()
# Getting all unique track numbers
Track = set([])
cursor = arcpy.da.SearchCursor("C:\tryingOut\Input.gdb\Tracks",["track"],sql_clause=(None, 'ORDER BY track' ))
for row in cursor:
Track.add(row[0])
# Trying to apply multiprocessing
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for i in Track:
if Counter % 1000 == 0:
print "Counter = ", Counter, "Current Track = ",i
Counter += 1
pool.apply_async(MyFunction, i)