arcpyでのin_memoryワークスペースの同時使用


8

フィーチャクラスから小さなポリゴンを削除するPythonスクリプトを使用しています。このスクリプトは、「in_memory」ワークスペースに固定(ハードコード)名を持つ一時的なフィーチャクラスを作成します。例:

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

これはかなり再利用可能なスクリプトなので、ジオプロセシングチェーンの多くのポイントで使用します。

異なるプロセスから(同時に)2回呼び出された同じスクリプトが、たとえば "in_memory / item_a"で競合することは危険ですか?または、「in_memory」ワークスペースはプロセスごとに分かれていますか?

ArcInfo 10.0を使用しています。

回答:


8

あなたの質問をテストするために、2つのコピーを同時に実行する簡単なスクリプトを書きました。1つはArcMapのスクリプトツールとして、もう1つはPythonwinのスクリプトツールです。驚いたことに、 "in_memory"ワークスペースが共有されていたため、それらを同時に実行できませんでした。ただし、これを回避する方法はあります。出力チェックを追加して、メモリ内のファイルが存在するかどうかを判断し、存在する場合は別の名前を付けることができます。

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

これにより、メモリ内機能にtestMemoryFeature0という名前が付けられます。そのメモリ機能が既に存在する場合は、testMemoryFeature1という名前を付けようとし、十分な名前が見つかるまで続けます。


7
arcpy.CreateUniqueName関数を使用することもできます。
Alex Markov

とても便利な!これが存在することを知りませんでした。
bluefoot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.