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()