Python スレッドプール

Fumbani Banda 2023年1月30日
  1. スレッドプールの定義
  2. multiprocessing.pool.ThreadPoolmultiprocessing.Pool の違い
  3. Python の multiprocessing.Pool
  4. Python の multiprocessing.pool.Threadpool
Python スレッドプール

このチュートリアルでは、multiprocessingPoolmultiprocessing.poolThreadPool の違いを示します。

スレッドプールの定義

スレッドプールは、事前にインスタンス化されたアイドル状態のスレッドのグループであり、作業を開始する準備ができています。非同期で実行されるタスクごとに新しいスレッドオブジェクトを作成すると、コストがかかります。スレッドプールを使用すると、タスクをタスクキューに追加し、スレッドプールがタスクに使用可能なスレッドを割り当てます。スレッドプールは、必要以上のスレッドの作成または破棄を回避するのに役立ちます。

multiprocessing.pool.ThreadPoolmultiprocessing.Pool の違い

multiprocessing.pool.ThreadPoolmultiprocessing.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
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

関連記事 - Python Threading