ArcGIS 10.1 Python AddIn sử dụng đa xử lý sự cố ArcMap?


20

Tôi muốn chạy một tác vụ đa xử lý từ một công cụ bổ trợ python. Vấn đề của tôi là quá trình tiếp tục thất bại. Về cơ bản sự cố ArcMap.

Đây là mã cơ bản của tôi:

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'

Nếu tôi chạy mã bên ngoài ArcMap hoặc từ hộp công cụ, nó sẽ hoạt động mà không gặp vấn đề gì, nhưng khi tôi đặt logic bên trong một nút, nó sẽ khiến arcmap bị sập.

Tôi đoán là ArcMap đang chạy trong quá trình cho tất cả các bổ trợ python. Có một công việc xung quanh cho vấn đề này?

Tôi cũng đã thử thêm freeze_support () vào mã, nhưng điều đó cũng không có gì.


1
Nếu ArcMap bị sập, hãy liên hệ với bộ phận hỗ trợ ESRI của bạn. nếu họ có thể sao chép nó, họ sẽ thừa nhận đó là một lỗi (và thậm chí có thể sửa nó một ngày).
GIS-Jonathan

Bạn đã cài đặt tất cả 5 Gói dịch vụ cho ArcGIS 10.x chưa ra? Có lẽ điều đó sẽ giúp
Sergios Kolios

OP đang sử dụng 10.1
Petr Krebs

Ngoài ra các gói dịch vụ được tích lũy, do đó bạn chỉ cần cài đặt gói mới nhất, không phải từng gói liên tiếp.
blah238

SP1 cho 10.1 đã được phát hành trong tuần này.
Timothy Michael

Câu trả lời:


8

Xử lý song song dễ dàng hơn 'hiển thị hơn thực hiện.' Trong trường hợp nhét tất cả vào một nút, tôi đoán hai vấn đề:

  1. Nhiều luồng chặn luồng UI ArcMap, hoặc
  2. ArcMap đặt khóa lược đồ riêng của mình vào nguồn dữ liệu và không cho phép quá trình python truy cập dữ liệu.

Hmm tìm kiếm vấn đề xa hơn đã được ghi lại ở đây trong trang Tài nguyên ArcGIS. Schema khóa trông giống như thủ phạm.


Không chắc chắn nếu bạn có ý định liên kết một cái gì đó ngoài những gì bạn đã làm (một bài đăng trên diễn đàn ArcGIS, không phải là một tài liệu chính thức).
blah238

Diễn đàn là liên kết chính xác. Khi ai đó tìm thấy nhiều tài liệu chính thức hơn, họ có thể cảm thấy thoải mái để đăng nó.
WolfOdrade

Cám ơn bạn đã đóng góp ý kiến. Tôi tin rằng nó thực sự gây ra bởi # 1. Các khối luồng cho ArcMap UI. Tôi đang sử dụng cơ sở dữ liệu SDE, vì vậy khóa lược đồ không phải là vấn đề của tôi ở đây.
mã cơ sở 5000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.