ArcGIS 10.1 Pythonアドインマルチプロセッシングを使用すると、ArcMapがクラッシュしますか?


20

Pythonアドインツールからマルチプロセッシングタスクを実行したいと思います。私の問題は、プロセスが失敗し続けることです。基本的にArcMapをクラッシュさせます。

私の基本的なコードは次のとおりです。

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'

ArcMapの外部またはツールボックスからコードを実行すると、問題なく動作しますが、ボタン内にロジックを配置すると、アークマップがクラッシュします。

私の推測では、ArcMapはすべてのpythonアドインで処理中です。この問題の回避策はありますか?

同じようにfreeze_support()をコードに追加しようとしましたが、それも何もしませんでした。


1
ArcMapがクラッシュする場合は、ESRIサポートに連絡してください。彼らがそれを複製できるなら、彼らはそれをバグと認めるでしょう(そしておそらくそれをいつか修正するでしょう)。
GISジョナサン

ArcGIS 10.x用の5つのService Packをすべて既にインストールしましたか?たぶんそれが役立つでしょう
セルジオスコリオス

OPは10.1使用している
ペトル・クレブス

また、サービスパックは累積的であるため、それぞれを連続してインストールするのではなく、最新のサービスパックのみをインストールする必要があります。
blah238

今週10.1のSP1がリリースされました。
ティモシーマイケル

回答:


8

並列処理は「表示される」よりも簡単です。これをすべてボタンに詰め込む場合、次の2つの問題を推測しています。

  1. 複数のスレッドがArcMap UIスレッドをブロックする、または
  2. ArcMapは独自のスキーマロックをデータソースに設定し、Pythonプロセスによるデータへのアクセスを許可しません。

さらに問題を探していることは、ArcGISリソースページに記載れています。スキーマロックは犯人のように見えます。


自分が行った以外の何か(公式ドキュメントではなく、ArcGISフォーラムの投稿)をリンクするつもりだったかどうかはわかりません。
blah238

フォーラムは正しいリンクです。誰かがより公式なドキュメントを見つけたら、気軽に投稿できます。
ウルフオドラード

ご提案ありがとうございます。私はそれが実際に#1によって引き起こされていると信じています。ArcMap UIのスレッドブロック。私はSDEデータベースを使用しているため、スキーマロックはここでの問題ではありません。
コードベース5000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.