Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ スレッドの操作 | Multithreading vs. Multiprocessing
Python構造化プログラミング

スレッドの操作

メニューを表示するにはスワイプしてください

Pythonのthreadingモジュールは、スレッドの作成と管理を簡単かつ強力に行う方法を提供し、1つのプロセス内で複数の操作を同時に実行することを可能にします。スレッドは同じメモリ空間を共有する軽量な実行単位であり、I/O操作、外部リソースの待機、ユーザーインターフェースの更新などのタスクに適しています。

スレッドのライフサイクルは通常、いくつかの段階を含みます:

  • 作成:スレッドオブジェクトがインスタンス化されますが、まだ開始されていません;
  • 開始:スレッドのstart()メソッドが呼び出され、実行可能状態になります;
  • 実行中:スレッドがターゲット関数を実行します;
  • 終了:スレッドがタスクを完了するか、未処理の例外が発生することで実行を終了します。

スレッドを管理する際には、同期に十分注意する必要があります。スレッドはデータやリソースを共有するため、適切な同期が行われないと競合状態や不整合な状態が発生する可能性があります。threadingモジュールは、LockRLockEventなどのプリミティブを提供し、共有リソースへのスレッドアクセスを調整するのに役立ちます。

以下の表は、Pythonで並行タスクを扱う際にスレッドの作成、管理、同期を効果的に行うための関数を示しています。

次の例は、threadingモジュールを使用して複数のスレッドを作成し開始する方法を示しており、複数のタスクを同時に実行できることを説明しています。

123456789101112131415161718192021
import threading import time def print_numbers(name): for i in range(1, 4): print(f"Thread {name}: {i}") time.sleep(0.5) # Create thread objects thread1 = threading.Thread(target=print_numbers, args=("A",)) thread2 = threading.Thread(target=print_numbers, args=("B",)) # Start the threads thread1.start() thread2.start() # Wait for both threads to finish thread1.join() thread2.join() print("Both threads have finished.")

print_numbers 関数を定義し、スレッド名とともに一連の数字を出力します。各スレッドを作成する際には args パラメータを使って引数を渡します。ここでは、それぞれ異なる名前("A" または "B")をスレッドに与えることで、出力を区別しやすくしています。start() メソッドを呼び出すことで、両方のスレッドが実行を開始し、同時に動作します。ループ内の time.sleep(0.5) 呼び出しは実行の遅延をシミュレートし、スレッドの出力が交互に現れることで、両方のスレッドが同時に動作していることが分かりやすくなります。join() メソッドは、両方のスレッドが完了するまで待機するために使用され、メインプログラムが早期に終了しないようにします。この方法により、タスクを並列で実行でき、待機時間を効率的に活用し、1つのプロセス内で同時実行が可能となります。

question mark

Pythonにおけるスレッドの同期に関する次の記述のうち、正しいものはどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  2
some-alt