<\/HEAD>
問題点<\/STRONG><\/SPAN><\/P>複雑で繰り返しの多いタスクを含むarcpyのスクリプトを扱ったことがある人なら、その処理完了までにどれほど時間がかかるかを知っています。数千のマップドキュメントを画像にエクスポートするような単純な作業でも、実行に数時間かかる可能性があります。その理由の一部は、pythonがデフォルトでシングルスレッドで動作するためです。JavaやC++など他の言語に慣れたプログラマーは、すべてのCPUで作業を分担するためにマルチスレッドを使うという良いアイデアを思いつくかもしれません。しかし残念ながら、pythonのマルチスレッドは同じようには機能しません。<\/P><\/P>arcpyが構築されているCPythonは、グローバルインタプリタロック(GIL)と呼ばれる仕組みを採用しており、あるスレッドがオブジェクトを操作している間に別のスレッドがそのオブジェクトを変更することを防ぎ、ガベージコレクションが円滑に動作するようにしています。しかし、この仕組みの欠点は、pythonのマルチスレッドスクリプトが利用可能なすべてのCPUを完全には活用できず、速度向上がほとんど見込めないことです。<\/P><\/P>解決策<\/STRONG><\/SPAN><\/P>ここで登場するのがmultiprocessingモジュールです。このモジュールはスレッドではなくプロセスを使用するため、GILを回避します。そのため、プログラマーは任意のマシン上で複数のプロセッサをフルに活用でき、プロセスはスレッドよりもオーバーヘッドが大きいものの、大幅な速度向上が可能となります。<\/P><\/P>このプレゼンテーションでは、arcpyでmultiprocessingモジュールを使用する際のベストプラクティスを示し、現在私たちがクライアントに提供しているソリューションとしてマルチスレッドをどのように活用しているかの例も紹介します。<\/P><\/P>共著者:<\/P>Brett Gaines<\/A>Kelvin Fox<\/A><\/SPAN><\/P><\/BODY><\/HTML>