Я заинтересован в изучении методов, позволяющих использовать все возможности многоядерной обработки, доступные на настольном компьютере. Arc заявляет, что фоновая геообработка позволяет пользователю использовать несколько ядер, однако задачи по сути должны ждать в очереди, чтобы предыдущая задача была завершена.
Кто-нибудь разрабатывал параллельные или многопоточные методы геообработки в Arc / Python? Существуют ли аппаратные узкие места, препятствующие многоядерной обработке отдельных задач?
Я нашел интересный пример в Stackoverflow, который заинтересовал меня, хотя это не пример геообработки:
from multiprocessing import Pool
import numpy
numToFactor = 976
def isFactor(x):
result = None
div = (numToFactor / x)
if div*x == numToFactor:
result = (x,div)
return result
if __name__ == '__main__':
pool = Pool(processes=4)
possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
print 'Checking ', possibleFactors
result = pool.map(isFactor, possibleFactors)
cleaned = [x for x in result if not x is None]
print 'Factors are', cleaned
this is not meant to discourage
.Ответы:
Вот пример многоядерного скрипта arcpy. Процесс очень интенсивно использует процессор, поэтому он хорошо масштабируется: перенос кода Avenue для создания теней зданий в ArcPy / Python для ArcGIS Desktop?
Немного более общей информации в этом ответе: могут ли параллельные процессы выполняться в одной модели?
источник
По моему опыту, самая большая проблема - это управление стабильностью. Если вы выполняете шесть недель обработки за одну ночь, у вас также будет шесть недель необъяснимых ошибок и ошибок.
Альтернативный подход заключается в разработке автономных сценариев, которые могут работать независимо и не работать, не вызывая проблем:
источник