ArcGIS 10.1 Python AddIn ใช้การประมวลผลแบบมัลติโพรเซสขัดข้อง ArcMap?


20

ฉันต้องการเรียกใช้งานมัลติโปรเซสเซอร์จากเครื่องมือเสริมของหลาม ปัญหาของฉันคือกระบวนการทำให้ล้มเหลว โดยทั่วไปเกิดปัญหา 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 เกิดความผิดพลาด

ฉันเดาว่า ArcMap ทำงานอยู่ในกระบวนการสำหรับ python add-in ทั้งหมด มีการแก้ไขสำหรับปัญหานี้หรือไม่?

ฉันได้ลองเพิ่มใน freeze_support () ลงในรหัสด้วย แต่ก็ไม่ได้ทำอะไรเช่นกัน


1
ถ้า ArcMap ขัดข้องให้ติดต่อฝ่ายสนับสนุน ESRI ของคุณ หากพวกเขาสามารถทำซ้ำมันพวกเขาจะยอมรับข้อผิดพลาด (และอาจแก้ไขได้ในวันเดียว)
GIS-Jonathan

คุณได้ติดตั้ง Service Packs ทั้ง 5 สำหรับ ArcGIS 10.x แล้วหรือยัง? อาจจะช่วยได้
Sergios Kolios

OP กำลังใช้ 10.1
Petr Krebs

เซอร์วิสแพ็คเป็นแบบสะสมดังนั้นคุณจะต้องติดตั้งล่าสุดเท่านั้นไม่ใช่เซอร์วิสแต่ละอันอย่างต่อเนื่อง
blah238

SP1 สำหรับ 10.1 ได้เปิดตัวในสัปดาห์นี้
Timothy Michael

คำตอบ:


8

การประมวลผลแบบขนานนั้น 'แสดงได้ง่ายกว่าที่ทำ' ในกรณีของการบรรจุสิ่งเหล่านี้ทั้งหมดในปุ่มฉันเดาสองประเด็น:

  1. หลายเธรดบล็อกเธรด ArcMap UI หรือ
  2. ArcMap ทำการล็อคสคีมาของตัวเองในแหล่งข้อมูลและไม่อนุญาตให้กระบวนการไพ ธ อนเข้าถึงข้อมูล

อืมมองปัญหาเพิ่มเติมได้รับการบันทึกไว้ที่นี่ในหน้า ArcGIS Resources ล็อค Schema ดูเหมือนว่าผู้กระทำผิด


ไม่แน่ใจว่าคุณต้องการเชื่อมโยงบางอย่างนอกเหนือจากสิ่งที่คุณทำ (โพสต์ฟอรัม ArcGIS ไม่ใช่เอกสารทางการ)
blah238

ฟอรั่มเป็นลิงค์ที่ถูกต้อง เมื่อมีคนพบเอกสารที่เป็นทางการมากขึ้นพวกเขาสามารถโพสต์ได้ฟรี
WolfOdrade

ขอขอบคุณสำหรับคำแนะนำของคุณ. ฉันเชื่อว่ามันเกิดจาก # 1 บล็อกเธรดสำหรับ ArcMap UI ฉันใช้ฐานข้อมูล SDE ดังนั้นการล็อคคีมาไม่ใช่ปัญหาของฉันที่นี่
ฐานรหัส 5000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.