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 プログラムを作成するために不可欠です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3