Примітка. Хоча на це питання є відповідь, будь-які подальші поради щодо оптимізації процесу курсору будуть дуже вдячні. Я буду стежити за будь-якими оновленнями.
Наразі мій бос (який працює в «Авеню») і я (працюю в «Python») намагаємось вирішити одну і ту ж проблему. Швидше, ми обидва це вирішили, але швидкість, з якою діють наші рішення, ... найменше, нерівномірна. Те, що його сценарій обробляє за 2 години, може зайняти до 6-х. Єдина реальна різниця в синтаксисі та реалізації в логіці походить від Bitx-карти 3.x та курсорів 10.x. Ми обидва:
1) Збережіть значення в Таблиці 1.
2) Використовуйте ці значення для запиту рядка в Таблиці 2.
3) Збережіть значення з Таблиці 2 для вставки в Таблицю 3 як новий рядок.
В обох сценаріях ці процеси завершуються в дві вкладені петлі. Перш ніж я почати розкопуватися у чудовий світ оптимізації коду, це очікуване явище при порівнянні продуктивності сценарію Avenue з Python? Це не перший раз, коли його сценарії значно перевершили міну за часом експлуатації, тому я хотів би знати, чи є щось, про що я маю знати, перш ніж розп'яти себе за жахливі сценарії.
Ось мій сценарій без сторонніх бітів:
import arcpy
import time
import sys
import os
def recordfindcopy(inFile,query,outFile):
findRecord = arcpy.SearchCursor(inFile,query)
for record in findRecord:
copyRecord = arcpy.InsertCursor(outData) # <--- D'oh! (See answer)
field = record.FIELD
copy = copyRecord.newRow()
copy.FIELD = field
copyRecord.insertRow(copy)
StreetsFileList = [r"Path",
r"Path"]
for sfile in StreetsFileList:
inStreets = sfile
inTable = r"Path"
outData = r"Path"
fsaEntry = arcpy.SearchCursor(inTable)
for row in fsaEntry:
id = row.ID
sQuery = "ID = %s " % (str(id))
recordfindcopy(inStreets,sQuery,outData)
EDIT : Враховуючи деякі коментарі до цих пір, мені цікаво, чи може бути кращий спосіб зробити це через приєднання, хоча я сумнівно враховую розмір таблиць brobdingnagian (слово дня!). Основою обробки є додавання інформації з однієї таблиці до будь-яких відповідних записів у другій таблиці та створення третьої таблиці, що містить лише важливі поля. Я хотів спробувати це за допомогою SDE, але це, здається, не є доступним варіантом. Думки? Прошу вибачення, якщо мої запитання завжди настільки задіяні , але я намагаюся дійти до глибини давнього роздратування.
Відповідь : Проста пропозиція Якуба скоротила час обробки з 30 секунд на 500 записів до 3 секунд на 500 записів. Повторне введення курсору вставки на кожну вставку значно сповільнило (очевидно). Хоча це може бути не найбільш оптимізацією, яку можна зробити для цього процесу, коли він протиставляється швидкості ArcView 3.x, для моїх цілей цього наразі достатньо. Подальші пропозиції дуже вітаються!