Hiệu suất tập lệnh Python như một công cụ ArcGIS Versus Stand-Alone


11

Có ai đã nghiên cứu sự khác biệt trong việc chạy tập lệnh Python trong ArcToolbox so với tập lệnh độc lập chưa? Tôi đã phải viết một tập lệnh nhanh và bẩn để chuyển đổi một tập hợp các hình ảnh RGB thành một băng tần bằng cách trích xuất băng tần 1. Khi một tập lệnh độc lập đọc và ghi vào PC của tôi, nó xử lý 1000 hình ảnh có kích thước giống hệt nhau trong khoảng 350 giây. Chạy cùng một kịch bản từ ArcToolbox mất khoảng 1250 giây.

import arcpy
import csv
from os import path

arcpy.env.workspace = in_folder
image_list = arcpy.ListRasters()

#Create a CSV file for timing output
    with open(outfile, 'wb') as c:
        cw = csv.writer(c)
        cw.writerow(['tile_name', 'finish_time'])

        #Start the timer at 0
        start_time = time.clock()

        for image in image_list:
            #Extract band 1 to create a new single-band raster
            arcpy.CopyRaster_management(path.join(image, 'Band_1'), path.join(out_folder, image))
            cw.writerow([image, time.clock()])

Tôi đã thêm một số mã để theo dõi khi mỗi ô kết thúc xử lý và xuất kết quả dưới dạng CSV. Chuyển đổi thời gian kết thúc thành thời gian xử lý xảy ra trong Excel. Vẽ đồ thị kết quả, thời gian xử lý gần như giống nhau cho mỗi ô như một tập lệnh, nhưng thời gian xử lý tăng tuyến tính khi chạy dưới dạng Công cụ ArcGIS.

nhập mô tả hình ảnh ở đây

Nếu dữ liệu đọc và ghi vào một thiết bị mạng, mức tăng dường như là theo cấp số nhân.

Tôi không tìm kiếm những cách khác để hoàn thành nhiệm vụ đặc biệt này. Tôi muốn hiểu tại sao hiệu suất của tập lệnh này suy giảm theo thời gian khi chạy như một công cụ ArcGIS , nhưng không phải là một tập lệnh độc lập. Tôi đã nhận thấy hành vi này với các kịch bản khác là tốt.


1
python bên ngoài ArcGIS nhanh hơn nhiều. Tôi chỉ sử dụng cửa sổ python khi thực hiện các tập lệnh rất đơn giản hoặc muốn có khả năng kéo và thả các mục vào thiết bị đầu cuối. Tôi đoán là thiết bị đầu cuối ArcGIS kiểm soát việc phân bổ tài nguyên của trình thông dịch vì toàn bộ gói phần mềm cũng cần python để hoạt động.
atxgis

khuyến nghị của tôi (dựa trên kinh nghiệm của tôi, không phải dữ liệu hiệu suất được định lượng như bạn đã cung cấp) là chỉ sử dụng Arcpy như là phương sách cuối cùng. Trong ví dụ trên, bất kỳ trình thông dịch python nào không có arcpy đều có khả năng lọc hiệu quả một thư mục cho các trình quét và sao chép chúng vào một thư mục mới
Paul H

1
Có bao nhiêu sự khác biệt giữa xử lý địa lý nền x64 và trong tiến trình 32 bit?
Kirk Kuykendall

Khi bạn nói rằng bạn đang "chạy tập lệnh Python trong ArcToolbox", bạn có nghĩa là bạn đang chạy công cụ Python Script? Nếu vậy, bạn đang chạy nó không có tham số cho thử nghiệm của bạn?
PolyGeo

@PolyGeo vâng, tôi đã tạo một công cụ tập lệnh trong hộp công cụ ArcGIS. Phải mất 1 tham số, từ đó in_folder và out_folder được dẫn xuất. Đó là tất cả được thực hiện trước khi các phép đo thời gian bắt đầu.
Bjorn

Câu trả lời:


1

Đây là vấn đề của tôi: chạy tập lệnh từ ArcToolbox phải chịu mọi loại chi phí ẩn khi các công cụ đang cố gắng tương tác / cập nhật ứng dụng chính (ArcMap). Tất cả các công cụ sẽ cập nhật siêu dữ liệu, một số cố gắng làm mới cửa sổ bản đồ và MXD đang ghi lại mọi công cụ bạn chạy trong bảng lịch sử địa lý. Không có tác động tiềm ẩn nào xảy ra khi chạy trong IDE.

Vì vậy, chạy một vòng lặp chỉ 1000 lần có nghĩa là MXD đang lưu trữ 1000 bản ghi. Vì ArcMap là phần mềm độc quyền, chúng tôi không biết làm thế nào các cơ chế ghi nhật ký xử lý đang thực sự diễn ra và có thể bước giới hạn tốc độ là cấu trúc dữ liệu họ sử dụng không có khả năng xử lý sự lặp lại lớn?

Một vấn đề khác là ArcMap là một ứng dụng hướng sự kiện, mọi thứ xảy ra khi các sự kiện xảy ra, bạn xoay bản đồ và làm mới bản đồ, bạn thêm dữ liệu và kích hoạt nút. Tôi đoán có thể các công cụ đang bắn ra tất cả các loại sự kiện và ứng dụng trở nên "choáng ngợp" khi các công cụ được sử dụng theo cách lặp đi lặp lại, nhưng đó có phải là suy đoán của tôi không?

Tôi nghĩ rằng người ta phải cải thiện những ưu và nhược điểm, phơi bày tập lệnh dưới dạng công cụ tập lệnh giúp dễ sử dụng trong môi trường ArcMap, đặc biệt là cho người dùng không có quyền lực. Đó là một vấn đề quan trọng nếu bạn muốn mã của mình được thông qua. Số Hardcore crunching chỉ bởi bạn mà không cần phải thực hiện bất kỳ kiểm soát chất lượng trung gian sau đó chạy tập lệnh trong IDE ưa thích của bạn.

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.