HOWTO · Python
Python スレッドプール
マルチプロセッシングと multiprocessing.pool の Python スレッドプールの違いを示しています
このページの内容
このチュートリアルでは、multiprocessing の Pool と multiprocessing.pool の ThreadPool の違いを示します。
スレッドプールの定義
スレッドプールは、事前にインスタンス化されたアイドル状態のスレッドのグループであり、作業を開始する準備ができています。非同期で実行されるタスクごとに新しいスレッドオブジェクトを作成すると、コストがかかります。スレッドプールを使用すると、タスクをタスクキューに追加し、スレッドプールがタスクに使用可能なスレッドを割り当てます。スレッドプールは、必要以上のスレッドの作成または破棄を回避するのに役立ちます。
multiprocessing.pool.ThreadPool と multiprocessing.Pool の違い
multiprocessing.pool.ThreadPool は multiprocessing.Pool と同じように動作します。違いは、multiprocessing.pool.Threadpool はスレッドを使用してワーカーのロジックを実行するのに対し、multiprocessing.Pool はワーカープロセスを使用することです。
Python の multiprocessing.Pool
以下のコードは、それぞれが関数 sleepy() を実行する 4つの異なるプロセスを生成します。
# python 3.x
from multiprocessing import Pool
import os
import time
def sleepy(x):
print("Process Id", os.getpid())
time.sleep(x)
return x
if __name__ == "__main__":
p = Pool(5)
pool_output = p.map(sleepy, range(4))
print(pool_output)
出力:
Process Id 239
Process Id 240
Process Id 241
Process Id 242
[0, 1, 2, 3]
Python の multiprocessing.pool.Threadpool
ThreadPool は、ワーカープロセスの代わりに sleepy() 関数を実行する 4つのスレッドを生成します。
# python 3.x
from multiprocessing.pool import ThreadPool
import os
import time
def sleepy(x):
print("Process Id", os.getpid())
time.sleep(x)
return x
if __name__ == "__main__":
p = ThreadPool(5)
pool_output = p.map(sleepy, range(4))
print(pool_output)
出力:
Process Id 217
Process Id 217
Process Id 217
Process Id 217
[0, 1, 2, 3]