20 votos

ArcGIS 10.1 Python Complemento Utilizando el Multiprocesamiento accidentes de ArcMap?

Me gustaría ejecutar un multiprocesamiento tarea de un add-in de python herramienta. Mi problema es que el proceso suele fallar. Básicamente, los accidentes de ArcMap.

Aquí está mi código de basic:

def function(startOID, endOID, fc):

    wrksp = r"c:\temp\mp_addintest\data\test_%s.txt" % (int(startOID) + int(endOID))
    # real logic removed to dumb it down
    with open(wrksp, 'w') as writer:
        writer.write("%s to %s from %s \n" % (startOID, endOID, fc))
    return wrksp
class btnMP(object):
    """Implementation for src_addin.MPButton (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        pool = None
        try:
            pythonExe = os.path.join(sys.exec_prefix, 'python.exe')
            multiprocessing.set_executable(pythonExe)
            pool = multiprocessing.Pool(4)
            results = []
            for i in xrange(4):
                results.append(pool.apply_async(function, [str(1),
                                      str(i),
                                      str("test")]))
            pool.close()
            pool.join()
            for result in results:
                print result.get()
        except:
            del pool
            print 'error'

Si ejecuto el código fuera de ArcMap o de una caja de herramientas, funciona sin problema, pero cuando pongo la lógica dentro de un botón, hace que arcmap se bloquee.

Mi conjetura es que ArcMap se está ejecutando en el proceso para todos los python add-ins. Hay una solución para este problema?

He intentado añadir en el freeze_support() en el código, pero que no hizo nada así.

8voto

DylanJ Puntos 951

El procesamiento en paralelo es más fácil " muestra que de hacer.' En el caso de meter todo esto en un botón, supongo que por dos cuestiones:

  1. Varios subprocesos bloque de ArcMap subproceso de interfaz de usuario, o
  2. ArcMap pone su propio esquema de bloqueo en el origen de datos y no permiso de python proceso de acceso a los datos.

Hmm buscando otro problema ha sido documentado aquí en ArcGIS página de Recursos. Bloqueo de esquema se ve como el culpable.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X