Pythonは一度に1つのコアのみを使用して動作しますか?


13

私は最近、Pythonが動作するのに一度に1つのコアしか使用していないことに気付きました。すべてのリソース(2番目のコア)を使用する方法、おそらく特別なビルドまたはコマンドがありますか?


1
繰り返しタスクのバッチプロセスを実行していて、スクリプトが正しいことを行っており、1つのコアの100%を使用して有用なことを行う場合、それほど危険ではない可能性があります。もう1つのコアも100%で実行する2番目のプロセスを開始します。全体的な効果は、1つのスレッドプロセスよりも優れている場合があります。処理する重いタスクが1つしかない場合、状況は異なります。
user30184 14

これは、すでに多くの情報や解決策については、このスレッドを参照議論されgis.stackexchange.com/questions/55048/...
イルファン

質問を編集して、Pythonに関するものなのか、それともより具体的にはArcPy(タグが示すように)に関するものなのかを明確にできますか?後者の場合、これが事実であることを示すために詳細を含めることができます。つまり、どのように気付きましたか?
PolyGeo

回答:


15

サブプロセスを使用して、Pythonスクリプト内の複数のコアを利用できるため、複数のタスクを並行して実行できます。ただし、1つのタスクを複数のコアに分割することはできません。このFAQの詳細な説明を参照してください:ArcGIS 10はマルチコアプロセッサや64ビットオペレーティングシステムをサポートしていますか?

経験豊富なPythonユーザーの場合、Dev Summit 2014のこのユーザープレゼンテーションで説明されているアプローチ(Pythonマルチプロセッシングとクリティカルパス方法論を使用した並列ジオプロセシング)に興味があるかもしれませんが、それでもいくつかのコアを使用することはできません同じタスク。

そうでない場合は、マルチスレッドのパフォーマンスをテストするために、今年後半にArcGIS Pro(完全に64ビットアプリケーション)のリリースを待つ必要があります(または、今すぐベータ版を試してください)


4

既に述べたように、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を実行します)。


1

Pypyは、CPython(「標準」のpython)より4〜5倍高速に実行されるPythonの準拠バージョンです。

ソースからビルドするのに十分な勇気があれば、「同じプロセスでCPUを大量に消費する独立した複数のスレッドを並行して実行できる」ブランチがあります。これは、コードを書き直さなくてもマルチスレッドの利点が得られることを意味します。


0

簡単な答えはノーです。より良い答えはそれが依存することです。

CPython(最も一般的に使用されるpython)の実装により、Pythonが実際にマルチスレッドを利用できないと想定するのは安全です。見る:

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

IOはGILの影響を受けないことに注意してください。

これで作業できます。他の人が指摘したように、サブプロセスを生成でき、マルチプロセッシングライブラリが役立ちます。


1
I / Oは耐性がありますが、ほとんどのGPツールやnumpyのすべてを含む、Cで実装されたほとんどの関数を呼び出しています。GILは、実際のGIS環境で考えられるよりも制限が少ないです。
ジェイソンシャイラー14

0

ArcGISの問題に対処することはできませんが、Pythonを使用して複数のタスクを処理する限り、Celery(celeryproject.org)などのタスクマネージャーを検討しましたか?これには、異なる処理タスクを識別し、それらを配布のために「マネージャー」に送信し、マネージャーからタスクを受け取る「ワーカー」を実行し、それらを処理し、結果を報告する必要があります。

これは実装するのは簡単ではありませんが、信じられないほどの柔軟性があり、処理能力を最大限に活用できます(つまり、これらのアイドルコアを使用できます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.