Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのスレッドベースの並列処理


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

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

マルチスレッドは2つの場合に使用されます。

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

  • メインプログラムに、互いに比較的独立したコードが含まれている場合。

スレッドモジュール

Pythonは、非常に強力なスレッドモジュールを提供し、スレッドの高レベルのサポートも提供します。

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

threading.active_count()

この関数は、現在生きているThreadオブジェクトの数を返します。ここで返されるカウントは、enumerate()によって返されるリストの長さに等しくなります。

threading.current_thread()

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

threading.get_ident()

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

threading.enumerate()

この関数は、デーモンスレッドを含む現在生きているすべてのスレッドオブジェクトのリストを返します。current_thread()関数は、ダミースレッドとメインスレッドを作成し、終了したスレッドとまだ開始されていないスレッドを除外します。

threading.main_thread()

この関数は、メインのThreadオブジェクトを返します。

threading.settrace(func)

すべてのスレッドがスレッドモジュールから開始されたら、トレース機能を設定します。 run()メソッドが呼び出される前に、この関数はスレッドごとにsys.settrace()に渡されます。

threading.setprofile(func)

すべてのスレッドがスレッドモジュールから開始されたら、プロファイル関数を設定します。 run()メソッドが呼び出される前に、この関数はスレッドごとにsys.setprofile()に渡されます。

threading.stack_size([size])

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

threading.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("NAME OF THE MAIN THREAD: " + str(threading.main_thread().getName()))
         print("IDENTIFICATION OF MAIN THREAD: "+ str(threading.get_ident()))
         print("STACK SIZE = " + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("LIST OF ENUMERATION: ")
print(threading.enumerate())
print("EXIT")

出力

NAME OF THE MAIN THREAD: MainThread
IDENTIFICATION OF MAIN THREAD: 5436
STACK SIZE = 0
Passing the trace function
None
PROFILE THREAD: MainThread
500
1000LIST OF ENUMERATION: ACTIVE THREADS ARE: 6
[<_MainThread(MainThread, started 5436)>, <Thread(Thread-4, started daemon 1960)>, <Heartbeat(Thread-5, started daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, started 4304)>, <mythread(Thread-8, started 8460)>, <mythread(Thread-9, started 4668)>]
EXIT

CURRENT THREAD IS: Thread-8

ACTIVE THREADS ARE: 5
CURRENT THREAD IS: Thread-9

  1. Tkinter Pythonでスレッドを使用する方法は?

    Tkinterでは、スレッド化を使用して一度に複数の関数を呼び出すことができます 。アプリケーション内の一部の機能の非同期実行を提供します。 Pythonでスレッドを使用するために、スレッドというモジュールをインポートできます。 スレッドをサブクラス化します クラス。新しいクラス内で、実行を上書きする必要があります メソッドを実行し、そこでロジックを実行します。 したがって、基本的にスレッドを使用すると、一度に複数の作業を行うことができます。アプリケーションでスレッド化を実現するために、Tkinterは Thread()を提供します 機能。 例を挙げて、しばらくスリープしてから別の関数を

  2. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',