そこで、スレッド化と比較して、マルチプロセッシング モジュールが CPU バウンドの作業でどのようにスケーリングするかを確認するために、いくつかのテスト コードを作成しました。Linux では、期待どおりのパフォーマンスの向上が得られます。
Linux (デュアル クアッド コア xeon): serialrun には 1192.319 ミリ秒かかりました 並列実行には 346.727 ミリ秒かかりました threadedrun には 2108.172 ミリ秒かかりました
私のデュアル コア MacBook Pro は同じ動作を示します。
osx (デュアルコア macbook pro) serialrun には 2026.995 ミリ秒かかりました 並列実行には 1288.723 ミリ秒かかりました threadedrun には 5314.822 ミリ秒かかりました
次に、Windows マシンで試してみたところ、非常に異なる結果が得られました。
窓 (i7 920): serialrun には 1043.000 ミリ秒かかりました parallelrun には 3237.000 ミリ秒かかりました threadedrun には 2343.000 ミリ秒かかりました
マルチプロセッシング アプローチが Windows で非常に遅いのはなぜですか?
テストコードは次のとおりです。
#!/usr/bin/env パイソン マルチプロセッシングのインポート スレッドのインポート 輸入時間 def print_timing(func): デフラッパー(*引数): t1 = 時間.時間() res = func(*引数) t2 = 時間.時間() print '%s は %0.3f ms かかりました' % (func.func_name, (t2-t1)*1000.0) 解像度を返す リターンラッパー デフカウンター(): xrange(1000000) の i の場合: 合格 @print_timing def serialrun(x): xrange(x) の i の場合: カウンター() @print_timing デフパラレルラン(x): proclist = [] xrange(x) の i の場合: p = multiprocessing.Process(ターゲット=カウンター) proclist.append(p) p.start() proclistの私のために: 参加する() @print_timing def threadedrun(x): スレッドリスト = [] xrange(x) の i の場合: t = threading.Thread(ターゲット=カウンター) threadlist.append(t) t.start() スレッドリストの私のために: 参加する() デフメイン(): シリアルラン(50) 並列実行(50) スレッドラン(50) __name__ == '__main__' の場合: 主要()