マルチプロセッシングプールを使用して、パフォーマンスを向上させるプロセスを作成できます。たとえば、画像を処理する関数handle_fileがあります。反復を使用する場合は、コアの最大100%しか使用できません。複数のコアを利用するために、プールマルチプロセッシングはサブプロセスを作成し、タスクをそれらに配布します。次に例を示します。
import os
import multiprocessing
def handle_file(path):
print 'Do something to handle file ...', path
def run_multiprocess():
tasks = []
for filename in os.listdir('.'):
tasks.append(filename)
print 'Create task', filename
pool = multiprocessing.Pool(8)
result = all(list(pool.imap_unordered(handle_file, tasks)))
print 'Finished, result=', result
def run_one_process():
for filename in os.listdir('.'):
handle_file(filename)
if __name__ == '__main__':
run_one_process
run_multiprocess()
run_one_processは、データを処理するための単純な方法ですが、遅いです。一方、run_multiprocessは8つのワーカープロセスを作成し、それらにタスクを配布します。 8つのコアを持っていると、約8倍速くなります。私はあなたのコアの倍数またはあなたのコアの数にワーカー番号を設定することをお勧めします。あなたはそれを試してどの構成がより速いかを見ることができます。
先進的な分散コンピューティングの場合、上記のlarsmansとしてZeroMQを使用できます。最初は分かりにくいです。しかし、理解すれば、データを処理するための非常に効率的な分散システムを設計することができます。あなたのケースでは、複数のREPを持つ1つのREQで十分だと思います。
が、これは参考になると思います。
[Windows 7のすべてのコアの使い方は?](http://stackoverflow.com/questions/3055696/how-to-use-all-the-cores-in-windows-7) –
必要なファイル/ディレクトリを指すことができる作業スクリプトが既にある場合は、必要なだけ多くのインスタンスを起動するシェルスクリプトを作成することを検討してください。 –
私はボトルの首がどこにあるのか見ることから始めたいと思います。あなたがIOを実行するあなたの時間の大部分を費やしているなら、はるかに速く行くことはできません。たとえば、あるプロセスが特定の速度でディスクからデータをロードすると、複数のプロセスがディスクを噛み込んでいるときにその速度を維持することはほとんどありません。 –