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がリリースされました。
—
ティモシーマイケル