「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 例を含む Python スレッド モジュールのクイック ガイド

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

2024 年 9 月 18 日に公開
ブラウズ:950

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 プログラムを作成するために不可欠です。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/usooldatascience/a-quick-guide-to-the-python-threading-module-with-examples-2b3g?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3