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