Inleiding
Python 2.6 met het multiprocessing module werd geïntroduceerd in ArcGIS producten bij de lancering van ArcGIS 10.0 (ArcGIS 10.0 binnenlandse release: 22 oktober 2010). Sindsdien is er ook op de blog van Esri USA geschreven over Python Multiprocessing – Benaderingen en Overwegingen (augustus 2011),Multiprocessing met ArcGIS – Benaderingen en Overwegingen (Deel 1): september 2012waarbij multiprocessing verwerking werd besproken, en recentelijk hebben veel ontwikkelaars wereldwijd samengekomen op de Esri Developer Summit waar Parallel Python: Multiprocessing met ArcPy: video van maart 2017,Vector- en Rastermultiprocessing met ArcPy: video van maart 2018wordt gepresenteerd als technische sessies.
Multiprocessing verwerking
ArcGIS Pro werkomgevingMet de introductie van krachtige hardware (64-bit OS standaard, aanbevolen CPU met 4 cores, en minimaal 16GB RAM) in ArcGIS Pro, neemt ook de hoeveelheid data die gebruikt wordt voor analyse en verwerking explosief toe, waardoor efficiënte analyse en verwerking nog steeds noodzakelijk is.
In dit kader wil ik een overzicht geven van multiprocessing verwerking met ArcPy en Python, die nu beschikbaar is als uitbreiding van het ArcGIS platform, inclusief belangrijke punten van implementatie en voorbeeldcode.
Voor daadwerkelijke codering van multiprocessing verwijs ik naar gerelateerde informatie en raad ik aan om zelf code te schrijven en te testen. Door dit artikel als referentie te gebruiken bij het implementeren van parallelle verwerking, hoop ik dat het een nuttige hulp zal zijn om succesvol in uw huidige workflow te integreren.
Beste praktijken
In de gerelateerde documentatie wordt multiprocessing verwerking met ArcPy en Python beschreven als beste praktijk.
- Om resultaten snel te behouden en hoge snelheid te bereiken, wordt aanbevolen omin_memory werkruimte te gebruiken.
- File geodatabase (referentie:Overzicht van geodatabases) en schrijf niet naar GRID raster.
Deze dataformaten veroorzaken problemen zoals lock conflicts en synchronisatieproblemen. Dit komt doordat file geodatabases en GRID rasters geen gelijktijdige schrijfbewerkingen ondersteunen. Met andere woorden, slechts één proces kan tegelijk schrijven. Bij het wijzigen van de feature class die in ArcGIS is geopend via ArcPy, ontstaat dit probleem. Bovendien wordt dit probleem groter wanneer meerdere feature classes worden beschreven binnen dezelfde file geodatabase. Zelfs als elke feature class onafhankelijk bestaat, kan slechts één feature class tegelijk worden beschreven binnen een file geodatabase in de file geodatabase.
- Voor het uitvoeren van scripts moet een 64-bit Python runtime omgeving worden gebruikt.
Vanaf ArcGIS Pro 1.4 of ArcGIS Server 10.5 of hoger, of Background Geoprocessing (64-bit) geïnstalleerd op ArcGIS Desktop 10.5 of hoger, kan een 64-bit runtime omgeving worden gebruikt. De 64-bit runtime omgeving lost problemen op zoals geheugenlimiet (4GB) die optreden bij de 32-bit versie bij grote datasets. Vooral bij implementatie moet men voorzichtig zijn met het gebruik van file geodatabases die op twee plaatsen worden genoemd. Het is aan te raden om in ieder proces aparte werkfuncties te gebruiken die de verwerking beschrijven zonder dezelfde file geodatabase te gebruiken, maar met masterfuncties kunnen meerdere stappen bestanden of individuele file geodatabases worden samengevoegd tot één bron.
* Een andere methode is om entiteitsreeks-geodatabases te gebruiken als schrijfbestemming vanuit meerdere processen via werkfuncties.
Voorbeeld van multiprocessing verwerking
Dit voorbeeld bevat meerdere shapefiles onder folders per prefectuur voor alle 47 prefecturen, waarbij na het maken van file geodatabases per prefectuur elk bestand wordt geconverteerd naar een feature class binnen die file geodatabase. De implementatiepunten zijn zoals beschreven in de beste praktijken hierboven: schrijfcode met "Converteer shapefile per prefectuur naar feature class binnen één file geodatabase per prefectuur".
Laten we eens kijken naar de code-voorbeeldimplementatie.
1) Werkfunctie: batch_convert
Als code-voorbeeld schrijven we eerst een werkfunctie vergelijkbaar met normale ArcPy-verwerking. Let erop dat deze werkfunctie overeenkomt met verwerking per proces, dus als er meerdere processen zijn (meerdere werkfuncties), moet u kiezen tussen het gebruik van entiteitsreeks-geodatabases of niet hetzelfde bestand gebruiken.
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">batch_convert</SPAN><SPAN class="punctuation token">(</SPAN>inws<span class="punctuation token">,</span> outws<span class="punctuation token">):</span>
<SPAN class="string token">'''
Verwerking uitgevoerd per proces (werkfunctie):
Omdat schrijven naar file geodatabases niet mogelijk is vanuit meerdere processen tegelijk,
- meerdere shapefiles onder folders per prefectuur
- conversie naar meerdere feature classes onder file geodatabase per prefectuur
'''</SPAN>
<SPAN class="comment token">#print("Conversie: {0} 1 {1}\n".format(inws,outws))</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> arcpy.Exists(outws)<SPAN class="punctuation token">:</SPAN>
outfolder = os.path.dirname(outws)
foldername = os.path.basename(outws)
arcpy.CreateFileGDB_management(outfolder, foldername, "CURRENT")
arcpy.env.workspace = inws
fcs = arcpy.ListFeatureClasses()
<SPAN class="keyword token">for</SPAN> fc <SPAN class="keyword token">in</SPAN> fcs<SPAN class="punctuation token">:</SPAN>
l = len(fc)
infc = os.path.splitext(fc)[0]
<SPAN class="comment token"># Wijzig naam van feature class door laatste 4 tekens te vullen met nullen</SPAN>
<SPAN class="comment token"># Voorbeeld) P101_CITY.shp 1 P0101_CITY</SPAN>
newfc = fc[:1] + fc[1:l-4].zfill(4)
<SPAN class="comment token"># Als feature class al bestaat dan Append</SPAN>
<SPAN class="comment token"># Als niet bestaand dan FeatureClassToFeatureClass</SPAN>
<SPAN class="keyword token">als</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Exists<SPAN class="punctuation token">(</SPAN>os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outws<SPAN class="punctuation token">,</SPAN>newfc<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
outfc<SPAN class="operator token">=</SPAN>os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outws<SPAN class="punctuation token">,</SPAN>newfc<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Append_management<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN>outfc<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">anders</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>FeatureClassToFeatureClass_conversion<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN>outws<SPAN class="punctuation token">,</SPAN>newfc<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">verwijder</SPAN> fcs
<SPAN class="keyword token">return</SPAN> <SPAN class="string token">" Conversie voltooid: {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>outws<SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span> </span ><span >< < EM O J I _ 2 9 > > </ s p a n > < s p a n > < < E M O J I _ 3 0 > > </ s p a n > < s p a n > < < E M O J I _ 3 1 > > </ s p a n > < s p a n > < < E M O J I _ 3 2 > > </ s p a n ></span >
2) Werkerfunctie van de lussen: multi_run_batch_convert
Bij het specificeren van een werkerfunctie vanuit een multiproces, is het niet nodig om argumenten voor de werkerfunctie op te geven als er maar één argument is, maar als er meerdere argumenten zijn zoals in dit voorbeeld, is het handig om een lussenfunctie te gebruiken.
<span class="keyword token">def</span> <span class="token function">multi_run_batch_convert</span>(args)<span class="punctuation token">:</span>
<span class="string token">'''
Wrapper voor batch_convert:
Een lussenfunctie om meerdere argumenten door te geven aan de uitvoeringsfunctie
'''</span>
<span class="keyword token">return</span> batch_convert<span class="punctuation token">(*</span>args<span class="punctuation token">)</span><<EMOJI_33><span class="line-numbers-rows"><span><<EMOJI_34>></span><span><<EMOJI_35>></span><span><<EMOJI_36>></span><span><<EMOJI_37>></span><span><<EMOJI_38>></span><span><<EMOJI_39>></span></span>
3) Verwerking van multiproces: exec_batch_convert
De twee argumenten (inws, outws) die aan de werkerfunctie worden doorgegeven, worden in een lijst params geplaatst.
Daarna,
pool = multiprocessing.Pool(cpu_cnt) wordt gebruikt om de pool te definiëren,
results = pool.map(multi_run_batch_convert , params) wordt gespecificeerd.
Eerste argument: naam van de te verwerken werkerfunctie (in dit geval de lussenfunctie) multi_run_batch_convert
Tweede argument: lijst met parameters params
<span class="keyword token">def</span> <span class="token function">exec_batch_convert</span>(infolder,outfolder)<span class="punctuation token">:</span>
<span class="string token">'''
Verwerking met multiproces (masterfunctie):
'''</span>
<span class="keyword token">try</span>:
start=datetime.datetime.now()
<span class="keyword token">print</span>("-- Start: Multiprocess_ShapefileToFeatureClassWithRename --:",start)
cpu_cnt=multiprocessing.cpu_count()
arcpy.env.workspace = infolder
inwss = arcpy.ListWorkspaces("*","Folder")
# Parameters om naar elke proces te sturen worden in een lijst gezet
params=[]
<span class="keyword token">voor</span> inws <span class="keyword token">in</span> inwss:
param1=inws # Prefectuurmap (met shapefiles erin)
gdbname= "{0}.gdb".format(os.path.basename(inws))
param2=os.path.join(outfolder,gdbname) # Prefectuur bestand geodatabase locatie
params.append((param1,param2))
<span class="keyword token">als</span> len(inwss) < cpu_cnt: # Als het aantal verwerkingsmappen minder is dan het aantal CPU cores, is het starten van onnodige processen niet nodig
cpu_cnt=len(inwss)
pool = multiprocessing.Pool(cpu_cnt) # Maak python processen aan gelijk aan het aantal CPU cores
results=pool.map(multi_run_batch_convert,params) # Processen worden sequentieel uitgevoerd met toewijzing per taak
pool.close()
pool.join()
# Resultaten van elke proces worden afgedrukt
voor r in results:
print(r)
# Combineer feature classes binnen geodatabases per prefectuurmap samenvoegen
# Voor het maken van een nationale versie noteer hier eventueel iets extra's
# ~ Verkort ~
fin<SPAN class="operator token">=<\/SPAN>datetime<SPAN class="punctuation token">.<\/SPAN>datetime<SPAN class="punctuation token">.<\/SPAN>now<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN>
<SPAN class="keyword token">print<\/SPAN> <SPAN class="string token">"-- Voltooid: Multiprocess_ShapefileToFeatureClassWithRename --:"<\/SPAN><SPAN class="punctuation token">,<\/SPAN>fin
<SPAN class="keyword token">print<\/SPAN> <SPAN class="string token">" Verstreken tijd:"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> fin<SPAN class="operator token">-<\/SPAN>start
<SPAN class="keyword token">except<\/SPAN><SPAN class="punctuation token">:<\/SPAN>
<SPAN class="keyword token">print<\/SPAN> traceback<SPAN class="punctuation token">.<\/SPAN>format_exc<SPAN class="punctuation token">(<\/SPAN>sys<SPAN class="punctuation token">.<\/SPAN>exc_info<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">[<\/SPAN><SPAN class="number token">2<\/SPAN><SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="line-numbers-rows"><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span ><span >< < EM O J I _ 3 3 > > < / S p a n > < S p a n > < < E M O J I _ 3 4 > > < / S p a n >
Voorbeeldcode van de voltooide versie
De Python-script (Multiprocess_Sample.py) die is geïmplementeerd volgens de codering tot nu toe, verandert infolder en outfolder in uw eigen omgeving. Als u het uitvoert vanuit de Python-uitvoeringsomgeving, wordt de gegevensconversie uitgevoerd met multiprocessing.
<span class="comment token">#coding:cp932</span>
<span class="keyword token">import</span> arcpy<span class="punctuation token">,</span>os
<span class="keyword token">import</span> sys
<span class="keyword token">import</span> multiprocessing
<span class="keyword token">import</span> datetime
<span class="keyword token">import</span> traceback
reload<span class="punctuation token">(</span>sys<span class="punctuation token">)</span>
sys<span class="punctuation token">.</span>setdefaultencoding<span class="punctuation token">(</span>'cp932'<span class="punctuation token">)</span>
<span class="keyword token">def</span> <span class="token function">multi_run_batch_convert</span>(args<span class="punctuation token">):</span>
<span class="string token">'''
wrapper voor batch_convert:
wrapper om meerdere argumenten door te geven aan parallelle verwerking
'''</span>
<span class="keyword token">return</span> batch_convert<span class="punctuation token">(*</span>args<span class="punctuation token">)</span>
<span class="keyword token">def</span> <span class="token function">batch_convert</span>(inws<span class="punctuation token">,</span> outws<span class="punctuation token">):</span>
<span class="string token">
verwerking uitgevoerd in één proces (werkfunctie):
schrijven naar bestand geodatabase is niet mogelijk met meerdere processen, dus
meerdere shapefile-bestanden onder een prefectuurmap,
meerdere feature classes onder een geodatabase-map van een prefectuur worden geconverteerd naar feature classes met nieuwe namen,
zoals beschreven.
'''</span>
<span class="comment token">#print("Conversie: {0} 12 {1}\n".format(inws,outws))</span>
<span class="keyword token">if</span> <span class="operator token">not</span> arcpy.Exists(outws<span class="punctuation token">):</span></span>,
outfolder<span class="operator token">=</span>os.path.dirname(outws)
foldername<span class="operator token">=</span>os.path.basename(outws)
arcpy.CreateFileGDB_management(outfolder<span class="punctuation token">,</span>,foldername<span class="punctuation token">,"CURRENT"</span>)
arcpy.env.workspace = inws
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
l=len(fc)
infc=os.path.splitext(fc)[0]
# Wijzig de naam van de featureclass met 4 toegevoegde tekens aan het begin.
# Bijvoorbeeld) P101_CITY.shp 12 P0101_CITY
newfc = fc[:1]+fc[1:l-4].zfill(4)
# Als de bestaande featureclass bestaat, gebruik Append.
# Als deze niet bestaat, gebruik FeatureClassToFeatureClass.
if arcpy.Exists(os.path.join(outws,newfc)):
outfc=os.path.join(outws,newfc)
arcpy.Append_management(fc,outfc)
else:
arcpy.FeatureClassToFeatureClass_conversion(fc,outws,newfc)
del fcs
return " Conversie voltooid: {0}".format(outws)
<span class="keyword token">def</span> <span class="token function">exec_batch_convert</span>(infolder<span class="punctuation token">,</span>,outfolder<span class="punctuation token">):</span>,
'''
マルチプロセスでの処理(マスター関数):
'''</SPAN>
<SPAN class="keyword token">probeer</SPAN><SPAN class="punctuation token">:</SPAN>
start<SPAN class="operator token">=</SPAN>datetime<SPAN class="punctuation token">.</SPAN>datetime<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">()</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="string token">"-- Strat: Multiprocess_ShapefileToFeatureClassWithRename --:"</SPAN><SPAN class="punctuation token">,</SPAN>start
cpu_cnt<SPAN class="operator token">=</SPAN>multiprocessing<SPAN class="punctuation token">.</SPAN>cpu_count<SPAN class="punctuation token">()</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> infolder
inwss <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListWorkspaces<SPAN class="punctuation token">("*",</SPAN><SPAN class="string token">"Folder"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Zet parameters om naar een lijst voor elke process</SPAN>
params<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[]</SPAN>
<SPAN class="keyword token">voor</SPAN> inws <SPAN class="keyword token">in</SPAN> inwss<SPAN class="punctuation token">:</SPAN>
param1<SPAN class="operator token">=</SPAN>inws <SPAN class="comment token"># Prefectuur folder (met shapefiles erin)</span>
gdbname<SPAN class="operator token">=</SPAN><SPAN class="string token">"{0}.gdb"</SPAN><SPAN class="punctuation token">.</span>format<span class="punctuation token">(</span>os<span class="punctuation token">.</span>path<span class="punctuation token">.</span>basename<span class="punctuation token">(</span>inws<span class="punctuation token">)</span><span class="punctuation token">)</span>
param2<SPAN class="operator token">=</SPAN>os<span class="punctuation token">.</span>path<span class="punctuation token">.</span>join<span class="punctuation token">(</span>outfolder<span class="punctuation token">,</span>gdbname<span class="punctuation token">)</span> <span class="comment token"># Prefectuur file geodatabase basismap</span>
params<span class="punctuation token">.</span>append<span class="punctuation token">((</span>param1<span class="punctuation token">,</span>param2<span class="punctuation token">))</span>
<span class="keyword token">als</span> len<span class="punctuation token">(</span>inwss<span class="punctuation token">)</span> < cpu_cnt<span class="punctuation token">:</span> <span class="comment token"># Als het aantal verwerkte mappen minder is dan het aantal CPU cores, geen onnodige processen starten</span>
cpu_cnt<span class="operator token">=</span>len<span class="punctuation token">(</span>inwss<span class="punctuation token">)</span>
pool <span class="operator token">=</span> multiprocessing<span class="punctuation token">.</span>Pool<span class="punctuation token">(</span>cpu_cnt<span class="punctuation token">)</span> <span class="comment token"># Maak python processen aan gelijk aan het aantal CPU cores</span>
results<span class="operator token">=</span>pool<span class="punctuation token">.</span>map<span class="punctuation token">(</span>multi_run_batch_convert<span class="punctuation token">,</span>params<span class="punctuation token">)</span> <span class="comment token"># Processen worden sequentieel uitgevoerd met toewijzing per taak</span>
pool<span class="punctuation token">.</span>close<span class="punctuation token">()</span>
pool<span class="punctuation token">.</span>join<span class="punctuation token">()</span>
<span class='comment'># Resultaten van elke process afdrukken</span>
<Span keyword='for'>r <Span keyword='in'> results:</Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span></Span><|vq_12442|>{
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># 都道府県別のファイル ジオデータベース内のフィーチャ クラスを統合して</SPAN>
<SPAN class="comment token"># 全国版を作成する場合はここに記載します</SPAN>
<SPAN class="comment token"># ~省略~</SPAN>
fin<SPAN class="operator token">=</SPAN>datetime<SPAN class="punctuation token">.</SPAN>datetime<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="string token">"-- Finish: Multiprocess_ShapefileToFeatureClassWithRename --:"</SPAN><SPAN class="punctuation token">,</SPAN>fin
<SPAN class="keyword token">print</SPAN> <SPAN class="string token">" Elapsed time:"</SPAN><SPAN class="punctuation token">,</SPAN> fin<SPAN class="operator token">-</SPAN>start
<SPAN class="keyword token">except</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> traceback<SPAN class="punctuation token">.</SPAN>format_exc<SPAN class="punctuation token">(</SPAN>sys<SPAN class="punctuation token">.</SPAN>exc_info<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">setup_batch_convert</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="string token">'''
コマンドプロンプトからの実行パラメータを設定:
都道府県別のシェープ ファイルが入った元フォルダ :infolder
例)
|-Shapefiles
|- 01_北海道
|-P101_CITY.shp
|-L102_RIVER.shp
・・・・・
|- 02_青森県
|- 03_岩手県
・・・・・
都道府県別のファイル ジオデータベースの作成先フォルダ :outfolder
例)
|-Filegdbs
|- 01_北海道.gdb
|-P0101_CITY
|-L0102_RIVER
・・・・・
|- 02_青森県.gdb
|- 03_岩手県.gdb
・・・・・
'''</SPAN>
infolder<SPAN class="operator token">=</SPAN>r<SPAN class="string token">"E:\DATA\Shapefiles"</SPAN> <SPAN class="comment token">#都道府県別のシェープファイルが入った元フォルダ</SPAN>
outfolder<SPAN class="operator token">=</SPAN>r<SPAN class="string token">"E:\DATA\Filegdbs"</SPAN> <SPAN class="comment token">#都道府県別のファイル ジオデータベースの作成先フォルダ</SPAN>
exec_batch_convert<SPAN class="punctuation token">(</SPAN>infolder<SPAN class="punctuation token">,</SPAN>outfolder<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">'__main__'</SPAN><SPAN class="punctuation token">:</SPAN>
setup_batch_convert<SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="line-numbers-rows"><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN><\/SPAN><SPAN></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></PAN
Voorbeeld van een Python-script in een 64-bit omgeving
Let op, voer het uit vanuit een 64-bit Python-omgeving zoals beschreven in het beste praktijkvoorbeeld. Voorbeelden van Python-scripts worden getoond voor ArcGIS Desktop en ArcGIS Pro.
Uitvoeringsvoorbeeld) ArcGIS Desktop 10.6.1
>C:\Python27\ArcGISx6410.6\python.exe Multiprocess_Sample.py
Uitvoeringsvoorbeeld) ArcGIS Pro 2.2
>"c:\Program Files\ArcGIS\Pro\bin\Python\scripts\propy.bat" Multiprocess_Sample.py
Referentieblogs en websites
•Arcpy gebruiken met multiprocessing – Deel 1•Arcpy gebruiken met multiprocessing – Deel 2•Arcpy gebruiken met multiprocessing – Deel 3•Python Multiprocessing – Benaderingen en Overwegingen (augustus 2011: ArcGIS 10.0 omgeving)•Multiprocessing met ArcGIS – Benaderingen en Overwegingen (Deel 1) (september 2012: ArcGIS 10.1 omgeving)•Materialen van het John A. Dutton e-Learning Lab van de Pennsylvania State University GEOG 489 - Geavanceerd Python-programmeren voor GIS - 1.6.6 ArcPy multiprocessing voorbeelden
Referentievideo's
•Parallel Python: Multiprocessing met ArcPy (Esri Developer Summit maart 2017)•Vector- en Rastermultiprocessing met ArcPy (Esri Developer Summit maart 2018)