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

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

王林
リリース: 2024-09-12 14:17:31
オリジナル
744 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート