threading.Condition
スレッディング・コンディション(標準ライブラリ)
意味 スレッド間同期と状態管理
threading.Conditionとは?
threading.Conditionは、スレッド間で同期を取りながら、共有リソースへのアクセスを制御するための仕組みです。Conditionは、LockとEventを組み合わせたようなもので、特定の条件が満たされるまでスレッドを待機させたり、条件が満たされたことを他のスレッドに通知したりできます。
threading.Conditionの具体的な使い方
条件変数を使用した生産者-消費者パターン
import threading
import time
import random
class Buffer:
def __init__(self, size):
self.buffer = []
self.size = size
self.condition = threading.Condition()
def produce(self, item):
with self.condition:
while len(self.buffer) == self.size:
print('バッファが満杯です。生産者が待機中...')
self.condition.wait()
self.buffer.append(item)
print(f'生産: {item}')
self.condition.notify()
def consume(self):
with self.condition:
while len(self.buffer) == 0:
print('バッファが空です。消費者が待機中...')
self.condition.wait()
item = self.buffer.pop(0)
print(f'消費: {item}')
self.condition.notify()
return item
def producer(buffer):
for i in range(10):
time.sleep(random.random())
buffer.produce(i)
def consumer(buffer):
for i in range(10):
time.sleep(random.random())
buffer.consume()
buffer = Buffer(5)
producer_thread = threading.Thread(target=producer, args=(buffer,))
consumer_thread = threading.Thread(target=consumer, args=(buffer,))
producer_thread.start()
consumer_thread.start()
producer_thread.join()
consumer_thread.join()
print('すべての処理が完了しました。')
👇出力結果
生産: 0
消費: 0
生産: 1
生産: 2
消費: 1
生産: 3
消費: 2
生産: 4
消費: 3
生産: 5
消費: 4
生産: 6
消費: 5
生産: 7
消費: 6
生産: 8
消費: 7
生産: 9
消費: 8
消費: 9
すべての処理が完了しました。
このコードは、threading.Conditionを使用して生産者-消費者パターンを実装しています。Bufferクラスは、最大サイズが決められたバッファを表現し、生産者と消費者の同期を管理します。生産者がバッファに項目を追加し、消費者がバッファから項目を取り出します。バッファが満杯の場合、生産者は待機し、空の場合は消費者が待機します。Conditionを使用することで、効率的にスレッド間の通信と同期を実現しています。
threading.Conditionに関するよくある質問
threading.Conditionが学べる書籍の紹介
「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのthreading.Conditionやinspect、threading.Thread、sys、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。
よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。
HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。
Pythonを学べる「プログラミング単語帳」アプリ
プログラミング単語帳がアプリになりました!Pythonはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。
収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。
いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。
2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!
2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!