ホームページ  >  記事  >  バックエンド開発  >  例を含む Python スレッド モジュールのクイック ガイド

例を含む Python スレッド モジュールのクイック ガイド

王林
王林オリジナル
2024-09-12 14:17:31739ブラウズ

A Quick Guide to the Python threading Module with Examples

導入

Python のスレッド モジュールは、スレッドを作成および管理するための高レベルのインターフェイスを提供し、コードを同時に実行できるようにします。これは、I/O バウンド操作など、並列実行できるタスクに特に役立ちます。以下は、スレッド モジュールで一般的に使用されるメソッドと関数のリストと簡単な例です。

1.スレッド()

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

2.start()

スレッドのアクティビティを開始します。

t = threading.Thread(target=print_numbers)
t.start()  # Runs the target function in a separate thread

3. join([タイムアウト])

join() メソッドが呼び出されるスレッドが終了するまで、呼び出しスレッドをブロックします。オプションで、タイムアウトを指定できます。

t = threading.Thread(target=print_numbers)
t.start()
t.join(2)  # Waits up to 2 seconds for the thread to finish

4. is_alive()

スレッドがまだ実行中の場合は True を返します。

t = threading.Thread(target=print_numbers)
t.start()
print(t.is_alive())  # True if the thread is still running

5. current_thread()

呼び出しスレッドを表す現在の 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

6.列挙()

現在有効なすべての Thread オブジェクトのリストを返します。

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()

print(threading.enumerate())  # Lists all active threads

7. active_count()

現在生きている Thread オブジェクトの数を返します。

print(threading.active_count())  # Returns the number of active threads

8.ロック()

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

9. RLock()

再入可能なロックにより、スレッドはそれ自体をブロックせずにロックを複数回取得()できます。

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

10. 条件()

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

11. イベント()

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

12. セマフォ()

セマフォ オブジェクトを使用すると、リソースに同時にアクセスできるスレッドの数を制限できます。

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

13. タイマー(インターバル、機能)

タイマー スレッドは、指定された間隔の後に関数を実行します。

def delayed_function():
    print("Executed after delay")

timer = threading.Timer(3, delayed_function)
timer.start()  # Executes `delayed_function` after 3 seconds

14. setDaemon(True)

デーモン スレッドはバックグラウンドで実行され、メイン プログラムが終了すると自動的に終了します。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。