セマフォ

Pythonでセマフォ。

import threading
import time

def do_thread(semaphore, id):
    with semaphore:
        for i in range(5):
            print('start', id, i)
      time.sleep(1)

if __name__ == '__main__':
    # セマフォの数は2
    sem = threading.Semaphore(2)
    t1 = threading.Thread(target=do_thread, args=(sem, 'A'))
    t2 = threading.Thread(target=do_thread, args=(sem, 'B'))
    t3 = threading.Thread(target=do_thread, args=(sem, 'C'))
    t1.start()
    t2.start()
    t3.start()

スレッドの同時実行数はセマフォの数となる。
2つのスレッドA、Bの処理が終わるまでスレッドCは待たされる。

$ python semtest1.py
start A 0
start B 0
start A 1
start B 1
start B 2
start A 2
start B 3
start A 3
start B 4
start A 4
start C 0
start C 1
start C 2
start C 3
start C 4
投稿日: