私は最近、Pythonが動作するのに一度に1つのコアしか使用していないことに気付きました。すべてのリソース(2番目のコア)を使用する方法、おそらく特別なビルドまたはコマンドがありますか?
私は最近、Pythonが動作するのに一度に1つのコアしか使用していないことに気付きました。すべてのリソース(2番目のコア)を使用する方法、おそらく特別なビルドまたはコマンドがありますか?
回答:
サブプロセスを使用して、Pythonスクリプト内の複数のコアを利用できるため、複数のタスクを並行して実行できます。ただし、1つのタスクを複数のコアに分割することはできません。このFAQの詳細な説明を参照してください:ArcGIS 10はマルチコアプロセッサや64ビットオペレーティングシステムをサポートしていますか?
経験豊富なPythonユーザーの場合、Dev Summit 2014のこのユーザープレゼンテーションで説明されているアプローチ(Pythonマルチプロセッシングとクリティカルパス方法論を使用した並列ジオプロセシング)に興味があるかもしれませんが、それでもいくつかのコアを使用することはできません同じタスク。
そうでない場合は、マルチスレッドのパフォーマンスをテストするために、今年後半にArcGIS Pro(完全に64ビットアプリケーション)のリリースを待つ必要があります(または、今すぐベータ版を試してください)
既に述べたように、ArcGIS Desktopのマルチプロセッシングはサポートされていません。デスクトップ環境でのGISデータセットの処理について話すとき、大きなワークフローを複数のコアの読み込みと同時に計算される小さなチャンクに分割できるかどうかを確認しようとしています。GPツールの動作は大きく異なる可能性があるため、ほとんどすべてのケースを個別に調査する必要があります。
単純な数学の問題を解くとき、何をするのが速いかを考えてください。1から100までのすべての数字をカウントする最も速い方法は何ですか?
1)結果を1つずつ合計し、合計を増分的に加算します(1 + 2 = 3、3 + 3 = 6、6 + 4 = 10など)。1つのコアがこのタスクに取り組んでいます。
2)事前に値を個々のチャンクに分割し、その値を最初に合計します(1〜30、31〜60および60〜100)。3つのコアが同時に機能します(最後の手順は、受信した3つの値を合計することです)。
さまざまなGPツールは、さまざまなbig-O表記を使用したさまざまなアルゴリズムの実装であるため、複数のプロセスを送信するという点では、おそらくそれらに異なるアプローチが必要になります。
良い出発点は、Pythonのマルチプロセッシングライブラリがどのように機能するかを学ぶことです。私はかなり頻繁に使用します。
また、64ビットPythonを使用してコマンドラインからPythonスクリプトを実行すると、通常は実行速度が速くなります(IDEの実行と比較しますが、マシンではそうではない場合があります)。バックグラウンドジオプロセシングは10.1で導入されましたが、64ビットPythonでPythonスクリプトを実行して、パフォーマンスへの影響を確認してください。
別の回答で名前が付けられたArcGIS Proは、ベータ5でダウンロードできます(バグを送信し、ArcGIS Online for Organizationsアカウントにアクセスするには、Esriベータコミュニティの参加者である必要があることに注意してください)Proを実行します)。
簡単な答えはノーです。より良い答えはそれが依存することです。
CPython(最も一般的に使用されるpython)の実装により、Pythonが実際にマルチスレッドを利用できないと想定するのは安全です。見る:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
IOはGILの影響を受けないことに注意してください。
これで作業できます。他の人が指摘したように、サブプロセスを生成でき、マルチプロセッシングライブラリが役立ちます。