Python スレッドプール
Fumbani Banda
2023年1月30日
- スレッドプールの定義
-
multiprocessing.pool.ThreadPool
とmultiprocessing.Pool
の違い -
Python の
multiprocessing.Pool
-
Python の
multiprocessing.pool.Threadpool
このチュートリアルでは、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]
著者: Fumbani Banda