ArcGIS 10.1 Python AddIn Menggunakan Multiprocessing crash ArcMap?

20

Saya ingin menjalankan tugas multiprosesing dari alat tambahan python. Masalah saya adalah prosesnya terus gagal. Pada dasarnya crash ArcMap.

Ini kode dasar saya:

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'

Jika saya menjalankan kode di luar ArcMap atau dari kotak alat, ia bekerja tanpa masalah, tetapi ketika saya meletakkan logika di dalam sebuah tombol, itu menyebabkan arcmap lumpuh.

Dugaan saya adalah bahwa ArcMap sedang berjalan untuk semua add-in python. Apakah ada solusi untuk masalah ini?

Saya sudah mencoba menambahkan di freeze_support () ke kode juga, tapi itu tidak berhasil.

basis kode 5000
sumber
1
Jika ArcMap mogok, hubungi dukungan ESRI Anda. jika mereka dapat mereplikasi, mereka akan mengakui itu bug (dan mungkin bahkan memperbaikinya suatu hari).
GIS-Jonathan
Sudahkah Anda menginstal semua 5 Paket Layanan untuk ArcGIS 10.x yang sudah keluar? Mungkin itu akan membantu
Sergios Kolios
OP menggunakan 10.1
Petr Krebs
Juga paket layanan bersifat kumulatif sehingga Anda hanya perlu menginstal yang terbaru, tidak masing-masing secara berurutan.
blah238
SP1 untuk 10.1 dirilis minggu ini.
Timothy Michael

Jawaban:

8

Pemrosesan paralel lebih mudah 'ditampilkan daripada dilakukan.' Dalam hal memasukkan semua ini ke dalam tombol, saya menduga dua masalah:

  1. Beberapa utas memblokir utas ArcMap UI, atau
  2. ArcMap menempatkan kunci skema sendiri pada sumber data dan tidak mengizinkan akses proses python ke data.

Hmm mencari masalah lebih lanjut telah didokumentasikan di sini di halaman Sumber Daya ArcGIS. Skema kunci terlihat seperti pelakunya.

WolfOdrade
sumber
Tidak yakin apakah Anda bermaksud menautkan sesuatu selain dari apa yang Anda lakukan (posting forum ArcGIS, bukan dokumen resmi).
blah238
Forum adalah tautan yang benar. Ketika seseorang menemukan lebih banyak dokumentasi resmi, mereka dapat dengan bebas mengirimkannya.
WolfOdrade
Terima kasih atas saran Anda. Saya percaya itu sebenarnya disebabkan oleh # 1. Blok thread untuk ArcMap UI. Saya menggunakan database SDE, jadi kunci skema bukan masalah saya di sini.
basis kode 5000