KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

SemaphoreとThread(ロック取得数の制御)

登録日 :2023/09/18 15:29
カテゴリ :Python基礎

Semaphoreのサンプルコード

Semaphoreを使うと、Threadの同時実行数を指定できる。(ロック取得数を制御する。)
Threadのロックと考え方は似ているけれども、Semaphoreはロックの取得数をコントロールして、同時実行可能なThreadの数を調整できるぞ。

import logging
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                    format='%(threadName)s: %(message)s')


def worker1(semaphore):
    with semaphore:
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')


def worker2(semaphore):
    with semaphore:
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')


def worker3(semaphore):
    with semaphore:
        logging.debug('start')
        time.sleep(3)
        logging.debug('end')


if __name__ == '__main__':
    semaphore = threading.Semaphore(2)
    t1 = threading.Thread(target=worker1, args=(semaphore, ))
    t2 = threading.Thread(target=worker2, args=(semaphore, ))
    t3 = threading.Thread(target=worker3, args=(semaphore,))
    t1.start()
    t2.start()
    t3.start()