Python のスレッド モジュールは、スレッドを作成および管理するための高レベルのインターフェイスを提供し、コードを同時に実行できるようにします。これは、I/O バウンド操作など、並列実行できるタスクに特に役立ちます。以下は、スレッド モジュールで一般的に使用されるメソッドと関数のリストと簡単な例です。
Thread クラスは、スレッド化モジュールの中心です。このクラスを使用して、新しいスレッドを作成および開始できます。
import threading def print_numbers(): for i in range(5): print(i) t = threading.Thread(target=print_numbers) t.start() # Starts a new thread t.join() # Waits for the thread to finish
スレッドのアクティビティを開始します。
t = threading.Thread(target=print_numbers) t.start() # Runs the target function in a separate thread
join() メソッドが呼び出されるスレッドが終了するまで、呼び出しスレッドをブロックします。オプションで、タイムアウトを指定できます。
t = threading.Thread(target=print_numbers) t.start() t.join(2) # Waits up to 2 seconds for the thread to finish
スレッドがまだ実行中の場合は True を返します。
t = threading.Thread(target=print_numbers) t.start() print(t.is_alive()) # True if the thread is still running
呼び出しスレッドを表す現在の Thread オブジェクトを返します。
import threading def print_current_thread(): print(threading.current_thread()) t = threading.Thread(target=print_current_thread) t.start() # Prints the current thread info
現在有効なすべての Thread オブジェクトのリストを返します。
t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_numbers) t1.start() t2.start() print(threading.enumerate()) # Lists all active threads
現在生きている Thread オブジェクトの数を返します。
print(threading.active_count()) # Returns the number of active threads
Lock オブジェクトは、競合状態を防ぐために使用される原始的なロックです。これを使用すると、一度に 1 つのスレッドだけが共有リソースにアクセスできるようにすることができます。
lock = threading.Lock() def thread_safe_function(): with lock: # Acquires the lock # Critical section print("Thread-safe code") t = threading.Thread(target=thread_safe_function) t.start()
再入可能なロックにより、スレッドはそれ自体をブロックせずにロックを複数回取得()できます。
lock = threading.RLock() def reentrant_function(): with lock: with lock: # Same thread can acquire the lock again print("Reentrant lock example") t = threading.Thread(target=reentrant_function) t.start()
Condition オブジェクトを使用すると、スレッドは何らかの条件が満たされるまで待機できます。
condition = threading.Condition() def thread_wait(): with condition: condition.wait() # Wait for the condition print("Condition met") def thread_notify(): with condition: condition.notify() # Notify the waiting thread t1 = threading.Thread(target=thread_wait) t2 = threading.Thread(target=thread_notify) t1.start() t2.start()
Event オブジェクトは、スレッド間の信号送信に使用されます。スレッドはイベントが設定されるのを待機し、別のスレッドがイベントを設定できます。
event = threading.Event() def wait_for_event(): event.wait() # Wait until the event is set print("Event has been set") t = threading.Thread(target=wait_for_event) t.start() event.set() # Set the event to allow the thread to continue
セマフォ オブジェクトを使用すると、リソースに同時にアクセスできるスレッドの数を制限できます。
semaphore = threading.Semaphore(2) # Only 2 threads can access the resource at once def access_resource(): with semaphore: print("Resource accessed") t1 = threading.Thread(target=access_resource) t2 = threading.Thread(target=access_resource) t3 = threading.Thread(target=access_resource) t1.start() t2.start() t3.start()
タイマー スレッドは、指定された間隔の後に関数を実行します。
def delayed_function(): print("Executed after delay") timer = threading.Timer(3, delayed_function) timer.start() # Executes `delayed_function` after 3 seconds
デーモン スレッドはバックグラウンドで実行され、メイン プログラムが終了すると自動的に終了します。 setDaemon(True) を呼び出すか、Thread コンストラクターに daemon=True を渡すことで、スレッドをデーモンにできます。
t = threading.Thread(target=print_numbers, daemon=True) t.start() # Daemon thread will exit when the main program ends
スレッド モジュールは、Python で同時実行性を処理するための強力なツールです。スレッドを作成および制御するための複数のクラスとメソッドが提供され、コードの並列実行が容易になります。基本的な Thread オブジェクトの使用からロックとセマフォによる同期の管理まで、このモジュールは同時実行 Python プログラムの作成に不可欠です。
以上が例を含む Python スレッド モジュールのクイック ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。