English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pythonのスレッドベースの並列性

コンピュータサイエンスにおけるスレッドは、スケジューラーによって独立して管理できる一連の命令の集合であり、スケジューラーはオペレーティングシステムの一部です。

スレッドの主な機能は、一度に複数のスレッドを実行することです。スレッドは異なるタスク、プログラム内の関数呼び出し、および複数のスレッドが同時に実行されることを意味しますが、異なるコンピュータ上で実行されることを意味するものではありません。

この2つの場合に多スレッドを使用します。

  • サブプログラムの出力がメインプログラムと組み合わせられる場合。

  • メインプログラムが互いに独立したコードを含む場合。

スレッドモジュール

Pythonは非常に強力なスレッドモジュールを提供しており、スレッドに対する高度なサポートも提供しています。

threadingモジュールは、スレッドに関連するデータを取得するための多くの関数を定義しており、これらの関数は自動的に実行されます。

threading.active_count()

この関数は現在アクティブなThreadオブジェクトの数を返します。ここでは、返されるカウントは返されるリストの長さに等しいです。enumerate()

threading.current_thread()

この関数は現在のThreadオブジェクトを返します。これは呼び出し元の制御スレッドに対応しています。

threading.get_ident()

この関数は現在のスレッドの「スレッド識別子」を返します。これは非ゼロの整数です。

threading.enumerate()

この関数は現在アクティブなすべてのThreadオブジェクトのリストを返します(デフォルトスレッドを含む)、current_thread()関数は仮想スレッドとメインスレッドを創造し、終了したスレッドやまだ起動していないスレッドを除外します。

threading.main_thread()

この関数はメインスレッドオブジェクトを返します。

threading.settrace(func)

すべてのスレッドをスレッドモジュールから起動した後、トレース機能を設定してください。run()この関数が呼び出される前に、各スレッドにsys.settrace()に渡されます。

threading.setprofile(func)

すべてのスレッドをスレッドモジュールから起動した後、設定ファイル機能を設定してください。run()この関数が呼び出される前に、各スレッドにsys.setprofile()に渡されます。

threading.stack_size([size])

この関数はスレッドスタックのサイズを返し、新しいスレッドの作成時に使用されます。

スレッド。TIMEOUT_MAX

これはブロッキング関数のタイムアウトパラメータ(Lock.acquire()、RLock.acquire()、Condition.wait()など)の最大値を持つ定数です。

サンプルコード

import threading
def trace_function():
   print("Passing the trace function")
   def profile():
      print("PROFILE THREAD: " + str(threading.current_thread().getName()))
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         print("ACTIVE THREADS ARE: "+ str(threading.active_count()))
         print("CURRENT THREAD IS: " + str(threading.current_thread().getName()))
         my_thread1 mythread("PP", 500)
         my_thread2 mythread("PythonProgram", 1000);
         print("メインスレッドの名前: ") + str(threading.main_thread().getName()))
         print("メインスレッドの識別: ")+ str(threading.get_ident()))
         print("スタックサイズ = ") + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("リストの枚挙: ")
print(threading.enumerate())
print("退出")

出力結果

メインスレッドの名前: MainThread
メインスレッドの識別: 5436
スタックサイズ = 0
トレース関数を渡しています
None
プロファイルスレッド: MainThread
500
1000リストの枚挙: アクティブスレッドは: 6
[<_MainThread(MainThread, 開始されました 5436)>, <Thread(Thread-4, デーモンとして開始されました 1960)>, <Heartbeat(Thread-5, デーモンとして開始されました 6452)>, <HistorySavingThread(IPythonHistorySavingThread, 開始されました 4304)>, <mythread(Thread-8, 開始されました 8460)>, <mythread(Thread-9, 開始されました 4668)>]
退出
現在のスレッドは: スレッド-8
アクティブスレッドは: 5
現在のスレッドは: スレッド-9
おすすめ