3

1)Pythonでスレッドモジュールをインポートすると、マルチコアマシンでコードを実行している場合でも、GILによってスレッドが一度に1つずつ実行されるため、CPUバウンドロードはこのライブラリを使用してもあまりメリットがないことを読みました。 。この場合、Pythonのスレッドライブラリを使用するとどのようなコードがメリットになりますか?

2)スレッドライブラリの場合、2つの信号の相互相関など、CPUを集中的に使用するタスクを並行して実行するには、マルチプロセッシングモジュールが使用するのに最適なモジュールですか?

これをより具体的にするために、並列化したいタスクが次のコードのforループであり、私のマシンには12コアしかない場合を考えてみましょう。テンプレートの長さが〜1000、画像の長さが〜2000、ソートする信号が〜1000であるとします。

import numpy as np

###2-D array of shape (points, signals)
signals = np.load('signals.npy')

###1-D template array for cross correlation
templateSignal = np.load('template.npy')

for s in range(signals.shape[2]):
    xcorr = np.correlate(templateSignal, signal[:,s])
4

1 に答える 1

2

GILを使用する場合でも、入出力操作によってプログラムがブロックされないため、Pythonでのスレッド化は便利です。ディスク操作の完了を待っている間、またはネットワークイベントを待っている間に操作を実行できます。

スレッドはGUIアプリケーションでも役割を果たします。この場合、プログラムはバックグラウンドで計算を実行している間、ユーザー入力に応答し続けることができます(@FogleBirdに感謝)

multiprocessing2)に関しては、モジュールを使用してCPUを集中的に使用するプログラムを複数のコアに分散できるという仮定は正しいです。プロセス間の通信のコストに注意してください。

于 2012-07-19T20:02:10.147 に答える