Interesuję się metodami uczenia się, aby w pełni wykorzystać moc przetwarzania wielordzeniowego dostępnego na komputerze stacjonarnym. Arc stwierdza, że geoprzetwarzanie w tle pozwala użytkownikowi na wykorzystanie wielu rdzeni, jednak zadania zasadniczo muszą czekać w kolejce na zakończenie poprzedniego zadania.
Czy ktoś opracował równoległe lub wielowątkowe metody geoprzetwarzania w Arc / Python? Czy są jakieś wąskie gardła sprzętowe, które uniemożliwiają przetwarzanie wielordzeniowe przy poszczególnych zadaniach?
Znalazłem interesujący przykład w Stackoverflow, który wzbudził moje zainteresowanie, chociaż nie jest to przykład geoprzetwarzania:
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
.Odpowiedzi:
Oto przykład wielordzeniowego skryptu arcpy. Proces ten wymaga dużego obciążenia procesora, więc skaluje się bardzo dobrze: kod Porting Avenue do tworzenia Building Shadows do ArcPy / Python dla ArcGIS Desktop?
Kilka bardziej ogólnych informacji w tej odpowiedzi: Czy współbieżne procesy mogą być uruchamiane w jednym modelu?
źródło
Z mojego doświadczenia wynika, że największym problemem jest zarządzanie stabilnością. Jeśli wykonasz sześć tygodni przetwarzania w ciągu jednej nocy, będziesz mieć również sześć tygodni niewytłumaczalnych błędów i błędów.
Alternatywnym podejściem jest opracowanie samodzielnych skryptów, które mogą działać niezależnie i nie mogą powodować problemów:
źródło