gleichzeitige Verwendung des Arbeitsbereichs in_memory in arcpy

8

Ich verwende ein Python-Skript, das kleine Polygone aus einer Feature-Class entfernt. Dieses Skript erstellt temporäre Feature-Classes mit festen (fest codierten) Namen im Arbeitsbereich "in_memory". Beispiel:

arcpy.CopyFeatures_management("in_fc","in_memory/item_a")

Es ist ein ziemlich wiederverwendbares Skript, daher verwende ich es an vielen Stellen in einer Geoverarbeitungskette.

Bin ich in Gefahr, dass dasselbe Skript, das zweimal von verschiedenen Prozessen (zur gleichen Zeit) aufgerufen wird, einen Konflikt hat, zum Beispiel "in_memory / item_a"? oder sind die Arbeitsbereiche "in_memory" für jeden Prozess separat?

Ich benutze ArcInfo 10.0.

Ben der Bär
quelle

Antworten:

8

Um Ihre Frage zu testen, habe ich ein schnelles Skript geschrieben, von dem ich zwei Kopien gleichzeitig ausgeführt habe - eine als Skriptwerkzeug in ArcMap und eine in Pythonwin. Zu meiner Überraschung konnte ich sie nicht gleichzeitig ausführen, da der Arbeitsbereich "in_memory" gemeinsam genutzt wurde. Es gibt jedoch einen Weg, dies zu umgehen. Sie können eine Ausgabeprüfung hinzufügen, um festzustellen, ob die Datei im Speicher vorhanden ist, und sie gegebenenfalls anders benennen:

i=0
check = 0
while check == 0:
    memoryFeat = "in_memory" + "\\" + "testMemoryFeature" + str(i)
    if arcpy.Exists(memoryFeat):
        i+=1
    else:
        check = 1

Dadurch wird versucht, Ihre In-Memory-Funktion testMemoryFeature0 zu benennen. Wenn diese Speicherfunktion bereits vorhanden ist, wird versucht, sie testMemoryFeature1 usw. zu benennen, bis ein ausreichender Name gefunden wird.

Bluefoot
quelle
7
Sie können auch die Funktion arcpy.CreateUniqueName verwenden.
Alex Markov
Sehr praktisch! Ich wusste nicht, dass es das gibt.
Bluefoot