Začínáme
Python 2.6, který obsahuje modul multiprocessing, byl poprvé zahrnut do produktů ArcGIS s vydáním ArcGIS 10.0 (domácí vydání ArcGIS 10.0: 22. října 2010). Od té doby se o vícevláknovém zpracování psalo i na blogu Esri v USA, který vysílá informace.Python Multiprocessing – přístupy a úvahy (srpen 2011),Multiprocessing with ArcGIS – přístupy a úvahy (část 1): září 2012a začalo se psát o vícevláknovém zpracování. V posledních letech se na Esri Developer Summit, kde se schází mnoho vývojářů z celého světa, objevila videa jakoParallel Python: Multiprocessing with ArcPy: březen 2017,Vector and Raster Multiprocessing with ArcPy: březen 2018která představují technické sešlosti týkající se této problematiky.
Vícevláknové zpracování
Prostředí ArcGIS Prose vyznačuje vysokým výkonem hardwaru (64-bitový OS je standard, doporučují se 4 jádra CPU a ideálně více než 16 GB paměti), což umožňuje efektivní analýzu a zpracování rostoucích objemů dat. Takové náročné analýzy a zpracování jsou stále potřeba.
V tomto kontextu bychom rádi představili rozšíření platformy ArcGIS pomocí vícevláknového zpracování v ArcPy a Pythonu, ukázali klíčové body implementace a představili příklady kódování.
Pro skutečné kódování doporučujeme ověřit si související informace a vyzkoušet si psaní kódu prakticky. Doporučujeme také sledovat tento článek jako průvodce implementací paralelního zpracování, který vám pomůže lépe zvládnout současné pracovní postupy.
Základní principy
V různých materiálech souvisejících s tématem je uvedeno, že základní principy vícevláknového zpracování s využitím ArcPy a Pythonu jsou následující.
- Pro udržení výsledků temporálních dat a rychlý běh doporučujeme používatin_memory workspace.
- Datová báze souborů (odkaz:Přehled datové báze souborů) a zápis do GRID rasterů by měl být vynechán.
Tyto formáty dat mohou způsobovat problémy s uzamykáním a synchronizací, protože souborová databáze i GRID raster nepodporují současný zápis. Jinými slovy lze zapisovat pouze do jednoho procesu najednou. Při pokusu o změnu třídy Feature Class vytvořené v ArcGIS pomocí ArcPy vznikaly tyto problémy. Navíc pokud držíte souborovou databázi a pokoušíte se zapisovat do více tříd Feature Class najednou, problém se zvětšuje. I když jsou všechny třídy Feature Class samostatné, zápis do tříd uvnitř souborové databáze může probíhat pouze po jednom ve stejné třídě Feature Class.
- Pro spuštění skriptu použijte 64-bitové Python runtime prostředí.
Použijte ArcGIS Pro verze 1.4 nebo vyšší, případně ArcGIS Server verze 10.5 nebo vyšší, nebo nainstalujte Background Geoprocessing (64-bit) pro ArcGIS Desktop verze 10.5 nebo vyšší, abyste mohli využít 64-bitové Python runtime prostředí. Toto prostředí řeší problémy s omezením paměti 32-bitového prostředí (4 GB) při práci s velkými daty. Při implementaci je třeba dbát zejména na používání jedné souborové databáze pro dva procesy současně. Doporučuje se nezapisovat do stejné souborové databáze ze dvou pracovních funkcí současně, ale místo toho použít hlavní funkci pro zápis do databáze a ostatní procesy nechat pracovat s kopiemi dat nebo slučovat výsledky později.
* Jako zápisovou destinaci z více procesů lze také použít entitní geodatabázi jako pracovní funkci.
Ukázka vícevláknového zpracování
Tento příklad obsahuje několik šablonových souborů podle jednotlivých prefektur ve všech 47 prefekturách Japonska a implementuje vzorový kód pro jejich převod do odpovídajících tříd Feature Class v každé prefektuře po vytvoření souborové databáze pro každou prefekturu. Body implementace jsou popsány v základních principech výše; při zápisu do souborové databáze je zamykání aktivováno, proto je třeba "psát kód tak, aby převod šablonových souborů jedné prefektury odpovídal převodu tříd Feature Class jedné prefektury".
Podíváme se na samotný kód implementace.
1) Pracovní funkce: batch_convert
Jako kódovací vzor nejprve napíšeme pracovní funkci podobnou běžnému zpracování v ArcPy. Je důležité si uvědomit, že tato pracovní funkce odpovídá zpracování v procesu, takže pokud je potřeba přistupovat k zápisu z více procesů (více pracovních funkcí), je nutné využít entitní geodatabázi nebo nepoužívat stejnou souborovou databázi současně.
<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">'''
Zpracování prováděné v jednom procesu (pracovní funkce):
Zápis do souborové databáze není možný z více procesů současně, proto
- několik šablonových souborů pod jednou prefekturou
- převod několika tříd Feature Class pod jednou souborovou databází prefektury
'''</SPAN>
<SPAN class="comment token">#print("Převod: {0} ⇒ {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"># Změna názvu třídy Feature Class odstraněním posledních 4 znaků</SPAN>
<SPAN class="comment token"># Například P101_CITY.shp → P0101_CITY</SPAN>
newfc = fc[:1] + fc[1:l-4].zfill(4)
<SPAN class="comment token"># Pokud třída Feature Class již existuje, použij Append</SPAN>
<SPAN class="comment token"># Pokud neexistuje, použij FeatureClassToFeatureClass</SPAN>
<SPAN class="keyword token">pokud</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>
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">jinak</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">del</SPAN> fcs
<SPAN class="keyword token">return</SPAN> <SPAN class="string token">" Výstup: {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></PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN><PAN> </PAN></span>
2) Název funkce worker: multi_run_batch_convert
Při zadávání worker funkce z multi procesu není potřeba předávat argumenty, pokud je jich jen jeden, ale pokud je jich více, je výhodné použít wrapper funkci.
<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 pro batch_convert:
Wrapper pro předání více argumentů do vykonávací funkce
'''</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) Zpracování multi procesu: exec_batch_convert
Do worker funkce se předávají dva argumenty (inws, outws) jako seznam params.
Poté
pool = multiprocessing.Pool(cpu_cnt) zajistí vytvoření poolu procesů podle počtu CPU
results = pool.map(multi_run_batch_convert , params) spustí mapování funkcí na parametry v poolu.
První argument: název worker funkce k vykonání (v tomto případě wrapper funkce) multi_run_batch_convert
Druhý argument: seznam parametrů params
<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 class="string token">'''
Zpracování v multi procesu (master funkce):
'''</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")
<span class="comment token"># Převedení parametrů pro jednotlivé procesy na seznam</span>
params = []
<span class="keyword token">for</span> inws <span class="keyword token">in</span> inwss:
param1 = inws <span class="comment token"># složka prefektury (obsahuje shapefily)</span>
gdbname = "{0}.gdb".format(os.path.basename(inws))
param2 = os.path.join(outfolder, gdbname) <span class="comment token"># cesta k databázi geodatabáze prefektury</span>
params.append((param1, param2))
<span class="keyword token">if</span> len(inwss) < cpu_cnt: <span class="comment token"># Pokud je méně složek než CPU, není třeba spouštět zbytečné procesy</span>
cpu_cnt = len(inwss)
pool = multiprocessing.Pool(cpu_cnt) <span class="comment token"># vytvoření python poolu podle počtu CPU</span>
results = pool.map(multi_run_batch_convert, params) <span class="comment token"># paralelní vykonání funkcí v pořadí podle přiřazení procesů</span>
pool.close()
pool.join()
<span class="comment token"># Výstup výsledků zpracování jednotlivých procesů</span>
<span class="keyword token">for</span> r <span class="keyword token">in</span> results:
<span class="keyword token">print</span>(r)
<span class="comment token"># Sloučení feature tříd uvnitř geodatabázových databází podle prefektur</span>
<span class="comment token"># Zde se zapíše případná tvorba celostátní verze</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">"-- Dokončeno: Multiprocess_ShapefileToFeatureClassWithRename --:"<\/SPAN><SPAN class="punctuation token">,<\/SPAN>fin
<SPAN class="keyword token">print<\/SPAN> <SPAN class="string token">" Uplynulý čas:"<\/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><SPAnclass="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>,
Vzorový kód dokončené verze
Implementoval jsem Python skript (Multiprocess_Sample.py) podle výše uvedeného kódovacího vzoru, změnil infolder a outfolder na hodnoty ve svém prostředí a pokud spustíte ze svého Python prostředí, bude prováděna konverze dat v multiprocessing režimu.
<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="string token">'''
wrapper pro batch_convert:
wrapper pro předání více argumentů do paralelního zpracování
'''</Span>
<Span class="keyword token">return</Span> batch_convert(*args)
<Span class="keyword token">def</Span> <Span class="token function">batch_convert</Span>(inws, outws):
<Span class="string token">
Zpracování prováděné v jednom procesu (pracovní funkce):
Nelze zapisovat do geodatabáze souborů současně z více procesů,
proto se více shapefile souborů pod jednou správní jednotkou prefektury
převádí na více feature classes pod jednou geodatabází souborů.
Poznámka
'''</Span>
<Span class="comment token">#print("Konverze: {0} => {1}\n".format(inws,outws))</Span>
<Span class="keyword token">if</Span> not arcpy.Exists(outws):
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 in fcs:
l=len(fc)
infc=os.path.splitext(fc)[0]
<Span class="comment token"># Změna názvu feature classy o 4 znaky posunutím</Span>
<Span class="comment token"># Například P101_CITY -> P0101_CITY</Span>
newfc = fc[:1]+fc[1:l-4].zfill(4)
<Span class="comment token"># Pokud feature třída již existuje, použije se Append</Span>
<Span class="comment token"># Pokud neexistuje, použije se FeatureClassToFeatureClass</Span>
<Span class="keyword token">if</Span> arcpy.Exists(os.path.join(outws,newfc)):
outfc=os.path.join(outws,newfc)
arcpy.Append_management(fc,outfc)
<Span class="keyword token">else</Span>:
arcpy.FeatureClassToFeatureClass_conversion(fc, outws, newfc)
<Span class="keyword token">del</Span> fcs
<Span class="keyword token">return</Span> " Konverze dokončena: {0}".format(outws)
<Span class="keyword token">def</Span> exec_batch_convert(infolder, outfolder):
<Span class="string token">'''
Zpracování v multiprocessing režimu (hlavní funkce):
'''
<SPAN class="keyword token">zkusit</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">tisk</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">("*","Folder")</SPAN>
<SPAN class="comment token"># Převést parametry pro každý proces na seznam</SPAN>
params<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[]</SPAN>
<SPAN class="keyword token">pro</SPAN> inws <SPAN class="keyword token">v</SPAN> inwss<SPAN class="punctuation token">:</SPAN>
param1<SPAN class="operator token">=</SPAN>inws <SPAN class="comment token"># složka prefektury (obsahuje shapefile)</span>
gdbname<SPAN class="operator token">=</SPAN><SPAN class="string token">"{0}.gdb"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(os.path.basename(inws))</SPAN>
param2<SPAN class="operator token">=</SPAN>os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(outfolder,gdbname)</SPAN> <span class="comment token"># složka geodatabáze prefektury</span>
params<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">((param1,param2))</span>
<span class="keyword token">pokud</span> len<span class="punctuation token">(inwss)</span> < cpu_cnt<span class="punctuation token">:</span> <span class="comment token"># pokud je počet složek menší než počet CPU, není třeba spouštět zbytečné procesy</span>
cpu_cnt<span class="operator token">=</span>len<span class="punctuation token">(inwss)</span>
pool <span class="operator token">=</span> multiprocessing<span class="punctuation token">.</span>Pool<span class="punctuation token">(cpu_cnt)</span> <span class="comment token"># vytvořit python procesy podle počtu CPU</span>
results<span class="operator token">=</span>pool<span class="punctuation token">.</span>map<span class="punctuation token">(multi_run_batch_convert,params)</span> <span class="comment token"># provést paralelně v procesech podle přiřazení</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 token"># výstup výsledků zpracování v jednotlivých procesech</span>
<span class="keyword token">pro</span> r <span class="keyword token">v</span> results<span class="punctuation token">:</span>
<span class="keyword token">tisk</span><span class="punctuation token">(r)</span>
<span class="comment token"># sloučit feature classy uvnitř geodatabází podle prefektur do jedné vrstvy</span>
<span class="comment token"># pokud chcete vytvořit celostátní verzi, napište to sem</span>
<span class="comment token">~省略~"}</translation></json>{
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>
Příklady spuštění Python skriptů v 64bitovém prostředí
Poznámka: Jak je uvedeno v best practices, spusťte prosím z 64bitového Python prostředí. Přikládáme příklady spuštění Python skriptů v ArcGIS Desktop a ArcGIS Pro.
Příklad spuštění) ArcGIS Desktop 10.6.1
>C:\Python27\ArcGISx6410.6\python.exe Multiprocess_Sample.py
Příklad spuštění) ArcGIS Pro 2.2
>"c:\Program Files\ArcGIS\Pro\bin\Python\scripts\propy.bat" Multiprocess_Sample.py
Odkazy na blogy a webové stránky
・Použití Arcpy s multiprocessing – Část 1・Použití Arcpy s multiprocessing – Část 2・Použití Arcpy s multiprocessing – Část 3・Python Multiprocessing – přístupy a úvahy (srpen 2011: ArcGIS 10.0 prostředí)・Multiprocessing s ArcGIS – přístupy a úvahy (část 1) (září 2012: ArcGIS 10.1 prostředí)・Materialy z John A. Dutton e-learningového institutu Pensylvánské státní univerzity GEOG 489 - Pokročilé programování v Pythonu pro GIS - příklady multiprocessing v ArcPy verze 1.6.6
Odkaz na video
・Parallel Python: Multiprocessing s ArcPy (březen 2017, Esri Developer Summit)・Multiprocessing vektorových a rastrových dat s ArcPy (březen 2018, Esri Developer Summit)