En essayant de faire du multitraitement avec arcpy, je rencontre parfois cette erreur:
FATAL ERROR (INFADI)
MISSING DIRECTORY
Je n'ai aucune idée de ce qui déclenche cette erreur, et il bloque le processus python, ce qui rend impossible d'obtenir un suivi. Il se produit lors de l'écriture de la sortie matricielle finale d'un long modèle sonore.
Elle est parfois accompagnée d'une erreur
Unable to write BND file for %TEMP%\ras####
Où% Temp est analysé correctement et #### est un nombre aléatoire à 4 chiffres. Cela est inhabituel car chaque processus a son propre espace de travail, où la plupart des fichiers doivent être écrits.
Le problème n'est pas les données d'entrée ... Je peux relancer le programme sur les entrées qui ont échoué et il fonctionnera correctement.
arcpy
arcgis-10.0
parallel-processing
blord-castillo
la source
la source
Réponses:
Voici quelques éléments à vérifier:
Utilisez-vous des curseurs? Les relâchez-vous? Essayez-vous de réutiliser des objets dans différents processus? Partagez-vous le même emplacement temporaire? Faites-vous dans le traitement de la mémoire?
En général, l'arcpy n'est qu'un wrapper autour des objets com et tout type de multitraitement sera délicat.
la source
J'ai trouvé que ce problème se produit lorsque arcpy.env.workspace et arcpy.env.scratchWorkspace sont identiques pour deux processus différents. Arc écrit presque tous les rasters intermédiaires dans l'espace de travail (ou espace de travail de travail) au format ESRI GRID. Vous ne pouvez pas écrire deux rasters ESRI GRID dans le même répertoire en même temps en raison de la structure de la pseudo-base de données du format (le dossier info contient des clés uniques pour chaque raster).
J'ai évité cette erreur en attribuant un espace de travail unique et scratchWorkspace pour chaque processus à l'aide d'un dossier temporaire tempfile.mkdtemp.
la source
J'ai également rencontré cela et je n'ai pas encore trouvé de solution sonore. Mon travail consiste à 1) m'assurer que la tâche de multitraitement est suffisamment robuste pour vérifier si les tâches sont terminées ou non, puis créer une nouvelle liste de tâches. 2) planifiez le lancement de deux scripts toutes les 10 à 15 minutes. Un script contient une commande pour tuer certains processus python en cours d'exécution et le second relance le script de multitraitement souhaité. Essentiellement, cela actualise le pool de multitraitement. Le script kill est quelque chose comme ceci:
Chaque lancement du script souhaité, je l'ai écrire son PID sur un csv.
la source
Je dois admettre que je suis à ce stade, juste un wannabee multithreading, mais un blog à https://pythongisandstuff.wordpress.com/2013/07/31/using-arcpy-with-multiprocessing-%E2%80%93-part -3 / suggère que l'intégration de la
arcpy.Exists()
fonction est essentielle pour y parvenir.la source
J'ai constaté que j'obtenais l'erreur INFADI lorsque j'essayais d'enregistrer et de modifier des rasters dans un seul dossier. L'affectation d'un sous-dossier à chaque tâche pour les sorties semble résoudre le problème. Je crois que le problème était dû à plusieurs lectures / écritures sur des fichiers périphériques associés au raster (par exemple le dossier "info"). J'emploie désormais également les précautions suivantes:
la source