Python Script Performance เป็นเครื่องมือ ArcGIS กับ Stand-Alone


11

มีใครศึกษาความแตกต่างในการใช้งานสคริปต์ Python ใน ArcToolbox กับสคริปต์แบบสแตนด์อโลนหรือไม่? ฉันต้องเขียนสคริปต์ที่รวดเร็วและสกปรกเพื่อแปลงชุดของภาพ RGB เป็นแบนด์เดียวโดยแยกแบนด์ 1 เนื่องจากการอ่านและเขียนสคริปต์แบบสแตนด์อโลนในพีซีของฉันมันประมวลผลภาพขนาดเท่ากัน 1,000 รายการในเวลาประมาณ 350 วินาที การเรียกใช้สคริปต์เดียวกันจาก ArcToolbox ใช้เวลาประมาณ 1250 วินาที

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()])

ฉันเพิ่มโค้ดเพื่อติดตามเมื่อไทล์แต่ละตัวประมวลผลเสร็จแล้วและส่งออกผลลัพธ์เป็น CSV การแปลงเวลาเสร็จสิ้นเป็นเวลาประมวลผลเกิดขึ้นใน Excel การสร้างกราฟผลลัพธ์เวลาในการประมวลผลจะเท่ากันสำหรับแต่ละไทล์เป็นสคริปต์ แต่เวลาในการประมวลผลจะเพิ่มขึ้นเป็นเส้นตรงเมื่อเรียกใช้เป็นเครื่องมือ ArcGIS

ป้อนคำอธิบายรูปภาพที่นี่

หากข้อมูลอ่านและเขียนไปยังอุปกรณ์เครือข่ายการเพิ่มขึ้นจะปรากฏเป็นเลขชี้กำลัง

ฉันไม่ได้มองหาวิธีอื่นในการทำภารกิจนี้ให้สำเร็จ ฉันต้องการเข้าใจว่าทำไมประสิทธิภาพของสคริปต์นี้ลดลงเมื่อเวลาผ่านไปเมื่อเรียกใช้เป็นเครื่องมือ ArcGISแต่ไม่ใช่สคริปต์แบบสแตนด์อะโลน ฉันได้สังเกตเห็นพฤติกรรมนี้กับสคริปต์อื่น ๆ เช่นกัน


1
หลามนอก ArcGIS เร็วขึ้นมาก ฉันใช้หน้าต่างหลามเมื่อทำสคริปต์ง่าย ๆ เท่านั้นหรือต้องการความสามารถในการลากและวางรายการลงในเทอร์มินัลฉันเดาว่าเทอร์มินัล ArcGIS จะควบคุมการจัดสรรทรัพยากรของล่ามเพราะแพ็คเกจซอฟต์แวร์ทั้งหมดต้องการใช้งาน
atxgis

ข้อเสนอแนะของฉัน (จากประสบการณ์ของฉันไม่ใช่ข้อมูลประสิทธิภาพเชิงปริมาณอย่างที่คุณให้ไว้) คือการใช้ arcpy เป็นทางเลือกสุดท้าย ในตัวอย่างข้างต้นตัวแปลภาษาไพ ธ อนที่ไม่มีอาร์ชีมีความสามารถในการกรองไดเรกทอรีสำหรับแรสเตอร์และคัดลอกไปยังโฟลเดอร์ใหม่ได้อย่างมีประสิทธิภาพ
Paul H

1
วิธีการประมวลผลทางภูมิศาสตร์พื้นหลัง x64 แตกต่างกันมากแค่ไหนในกระบวนการ 32 บิต
Kirk Kuykendall

เมื่อคุณพูดว่าคุณกำลัง "เรียกใช้สคริปต์ Python ใน ArcToolbox" หมายความว่าคุณกำลังใช้งานเครื่องมือ Python Script หรือไม่ ถ้าใช่คุณใช้งานโดยไม่มีพารามิเตอร์สำหรับการทดสอบหรือไม่?
PolyGeo

@PolyGeo ใช่ฉันสร้างเครื่องมือสคริปต์ในกล่องเครื่องมือ ArcGIS ใช้พารามิเตอร์ 1 ตัวซึ่งมาจาก in_folder และ out_folder เสร็จสิ้นก่อนที่การวัดเวลาจะเริ่มขึ้น
Bjorn

คำตอบ:


1

นี่คือสิ่งที่ฉันต้องทำ: การเรียกใช้สคริปต์จาก ArcToolbox มีค่าใช้จ่ายแอบแฝงทุกประเภทเนื่องจากเครื่องมือพยายามโต้ตอบ / อัปเดตแอปพลิเคชันหลัก (ArcMap) เครื่องมือทั้งหมดจะอัปเดตข้อมูลเมตาบางส่วนพยายามรีเฟรชหน้าต่างแผนที่และ MXD กำลังบันทึกทุกเครื่องมือที่คุณเรียกใช้ในแผงประวัติประมวลผล ไม่มีผลกระทบที่ซ่อนอยู่เหล่านี้เกิดขึ้นเมื่อทำงานใน IDE

ดังนั้นการรันลูปเพียง 1,000 ครั้งหมายความว่า MXD กำลังเก็บบันทึก 1,000 รายการ ในขณะที่ ArcMap ปิดซอฟต์แวร์ลิขสิทธิ์เราไม่ทราบว่ากลไกของการบันทึกการประมวลผลเกิดขึ้นจริงได้อย่างไรและอาจเป็นขั้นตอนที่ จำกัด อัตราการเป็นโครงสร้างข้อมูลที่พวกเขาใช้ไม่สามารถจัดการการทำซ้ำขนาดใหญ่ได้?

ปัญหาอีกประการหนึ่งคือ ArcMap เป็นแอพพลิเคชั่นขับเคลื่อนเหตุการณ์เกิดขึ้นเมื่อมีเหตุการณ์เกิดขึ้นคุณเลื่อนแผนที่และรีเฟรชแผนที่คุณเพิ่มข้อมูลและเปิดใช้งานปุ่ม ฉันเดาว่าเป็นไปได้ที่เครื่องมือจะตัดเหตุการณ์ทุกประเภทและแอปพลิเคชันจะ "จม" โดยพวกเขาเมื่อเครื่องมือถูกใช้ในลักษณะที่ซ้ำซาก แต่ฉันกำลังคาดเดาใช่ไหม

ฉันคิดว่าจะต้องเพิ่มข้อดีข้อเสียการเปิดเผยสคริปต์เป็นเครื่องมือสคริปต์ทำให้ใช้งานง่ายในสภาพแวดล้อม ArcMap โดยเฉพาะผู้ใช้ที่ไม่ใช้พลังงาน นั่นเป็นปัญหาสำคัญหากคุณต้องการให้รหัสของคุณถูกนำไปใช้ จำนวนไม่ยอมใครง่ายๆกระทืบโดยคุณไม่จำเป็นต้องทำการควบคุมคุณภาพระดับกลางใด ๆ จากนั้นเรียกใช้สคริปต์ใน IDE ที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.