Pythonのマルチスレッドとは何ですか?それを実現する方法は?



Pythonでのマルチタスクとは何かを学びましょう。また、Threadクラスを拡張せずに、クラスを作成せずにスレッドを作成する方法について、マルチスレッドについて説明します。

時間は人生で最も重要な要素です。その重要性のために、プログラミングの世界は、時間の消費を大幅に削減し、それによってパフォーマンスを向上させるのに役立つさまざまなトリックとテクニックを提供します。そのようなアプローチの1つは、Pythonでのマルチスレッドです。これは、以下で説明する最も重要な概念の1つです。 。

この記事で取り上げたすべての専攻の概要は次のとおりです。





とは マルチタスク Pythonで?
スレッドとは何ですか?
Pythonのマルチスレッドとは何ですか?
Pythonでマルチスレッドを使用するのはいつですか?
Pythonでマルチスレッドを実現する方法は?
Pythonでスレッドを作成する方法は?

sqliteレビュー用のdbブラウザ

Pythonでマルチスレッドを使用する利点



まず、Pythonでのマルチスレッドについて学習する前に、まずマルチタスクについて理解してみましょう。

Pythonのマルチタスクとは何ですか?

一般に、マルチタスクは複数のタスクを同時に実行する機能です。技術用語では、マルチタスクとは、オペレーティングシステムがさまざまなタスクを同時に実行する機能を指します。 例えば 、PCに何かをダウンロードしたり、曲を聴いたり、ゲームを同時にプレイしたりしています。これらのタスクはすべて、同期して同じOSによって実行されます。これは、時間を節約するだけでなく、生産性を向上させるマルチタスクに他なりません。

OSのマルチタスクには2つのタイプがあります。



  • プロセスベース
  • スレッドベース

この記事では、 スレッドベース マルチタスクまたは マルチスレッド

スレッドとは何ですか?

スレッド-python-edurekaでのマルチスレッドスレッドは基本的に 独立 実行の流れ。 1つのプロセスは複数のスレッドで構成できます。プログラムの各スレッドは特定のタスクを実行します。 例えば、 PCでFIFAなどのゲームをプレイしている場合、ゲーム全体は1つのプロセスです。 ただし、音楽の再生、ユーザーからの入力の取得、対戦相手の同期実行などを担当する複数のスレッドで構成されています。これらはすべて、同じプログラムでこれらの異なるタスクを実行するための個別のスレッドです。

すべてのプロセスには、常に実行されている1つのスレッドがあります。これがメインスレッドです。このメインスレッドは、実際には子スレッドオブジェクトを作成します。子スレッドもメインスレッドによって開始されます。この記事では、現在実行中のスレッドを確認する方法をさらに詳しく説明します。

これで、スレッドとは何かを明確に理解していただけたと思います。次に、Pythonのマルチスレッドとは何かを見てみましょう。

Pythonでマルチスレッドを使用するのはいつですか?

マルチスレッドは、時間を節約してパフォーマンスを向上させるのに非常に役立ちますが、どこにでも適用できるわけではありません。
前のFIFAの例では、音楽スレッドは入力を受け取るスレッドから独立しており、入力を受け取るスレッドは対戦相手を実行するスレッドから独立しています。これらのスレッドは相互に依存していないため、独立して実行されます。

したがって、マルチスレッドは、個々のスレッド間の依存関係が存在しない場合にのみ使用できます。

この記事では、Pythonでマルチスレッドを実現する方法についてさらに説明します。

Javaサンプルプログラムのswitchケース

Pythonでマルチスレッドを実現する方法は?

Pythonでのマルチスレッド化は、 スレッド モジュール。

このモジュールをインポートする前に、これをインストールする必要があります。これをanaconda環境にインストールするには、anacondaプロンプトで次のコマンドを実行します。

conda install -c conda-forge tbb

正常にインストールされたら、次のコマンドのいずれかを使用してスレッドモジュールをインポートできます。

スレッドからのインポートスレッドインポート*

スレッドモジュールがインストールされたので、先に進んでPythonでマルチスレッドを実行しましょう。

Pythonでスレッドを作成する方法は?


Pythonのスレッドは、次の3つの方法で作成できます。

  1. クラスを作成せずに
  2. Threadクラスを拡張することによって
  3. Threadクラスを拡張せずに

クラスを作成せずに

Pythonでのマルチスレッド化は、クラスを作成しなくても実行できます。同じことを示す例を次に示します。

例:

スレッドからimport * print(current_thread()。getName())def mt():print( 'Child Thread')child = Thread(target = mt)child.start()print( 'Executing thread name:'、current_thread( ).getName())

出力:

MainThread子スレッド実行中のスレッド名:MainThread

上記の出力は、存在する最初のスレッドがメインスレッドであることを示しています。次に、このメインスレッドは、関数を実行している子スレッドを作成し、最後のprintステートメントがメインスレッドによって再度実行されます。

次に、Threadクラスを拡張してPythonでマルチスレッドを実行する方法を見てみましょう。

Threadクラスを拡張することにより:

Threadクラスを拡張して子クラスを作成すると、子クラスは新しいスレッドが何らかのタスクを実行していることを表します。 Threadクラスを拡張する場合、子クラスは2つのメソッド、つまり__init __()メソッドとrun()メソッドのみをオーバーライドできます。これらの2つの方法以外に、他の方法をオーバーライドすることはできません。

Threadクラスを拡張してスレッドを作成する方法の例を次に示します。

例:

import threading import time class mythread(threading.Thread):def run(self):for x in range(7):print( 'Hi from child')a = mythread()a.start()a.join()print ( 'Bye from'、current_thread()。getName())

出力:
子供からこんにちは
子供からこんにちは
子供からこんにちは
子供からこんにちは
子供からこんにちは
子供からこんにちは
子供からこんにちは
MainThreadからさようなら

上記の例は、クラスmyclassがThreadクラスを継承し、子クラス、つまりmyclassがrunメソッドをオーバーライドしていることを示しています。デフォルトでは、クラス関数の最初のパラメーターは、現在のオブジェクトへのポインターであるselfである必要があります。出力は、子スレッドがrun()メソッドを実行し、メインスレッドが子の実行が完了するのを待つことを示しています。これは、join()関数が原因で、メインスレッドは子の終了を待機します。

スレッドを作成するこの方法は、標準的な方法であるため、最も好ましい方法です。ただし、Threadクラスを継承または拡張せずにスレッドを作成する場合は、次の方法で作成できます。

スレッドクラスを拡張せずに

Threadクラスを拡張せずにスレッドを作成するには、次のようにします。
例:

スレッドからimport * class ex:def myfunc(self):#selfは、range(7)のxのクラスfuncの最初のパラメーターとして必要です:print( 'Child')myobj = ex()thread1 = Thread(target = myobj。 myfunc)thread1.start()thread1.join()print( 'done')

出力:








完了

子スレッドはmyfuncを実行し、その後メインスレッドは最後のprintステートメントを実行します。

スレッドを使用する利点

マルチスレッドには多くの利点があり、そのいくつかは次のとおりです。

  • リソースのより良い利用
  • コードを簡素化します
  • さまざまなタスクの同時および並行発生を可能にします
  • 時間の消費または応答時間を削減し、それによってパフォーマンスを向上させます。

Pythonでマルチスレッドを使用する場合と使用しない場合のコードの実行にかかる時間を確認する例を次に示します。

javascriptのメソッドとは
 例: 
import time def sqr(n):for x in n:time.sleep(1)x%2 def cube(n):for x in n:time.sleep(1)x%3 n = [1,2,3 、4,5,6,7,8] s = time.time()sqr(n)cube(n)e = time.time()print(es)

出力:

16.042309284210205

上記は、スレッドを使用せずにプログラムを実行するのにかかる出力時間です。次に、スレッドを使用して、同じプログラムに何が起こるかを見てみましょう。

例:

スレッドからのインポートスレッドインポート*インポート時間defsqr(n):for x in n:time.sleep(1)print( '2で割った余り'、x%2)def cube(n):for x in n: time.sleep(1)print( '3で割った余り'、x%3)n = [1,2,3,4,5,6,7,8] start = time.time()t1 = Thread( target = sqr、args =(n、))t2 = Thread(target = cube、args =(n、))t1.start()time.sleep(1)t2.start()t1.join()t2.join ()end = time.time()print(end-start)
出力: 9.040220737457275

上記の出力は、スレッドを使用する場合にかかる時間は、同じプログラムがスレッドを使用せずに実行する場合にかかる時間と比較してはるかに短いことを明確に示しています。

Pythonでのマルチスレッドに関連するこの記事でカバーされている概念を明確に理解していただければ幸いです。これはプログラミングで使用される最も重要な概念の1つであるため、できる限り練習するようにしてください。

質問がありますか?この「Pythonでのマルチスレッド」ブログのコメントセクションでそれについて言及してください。 意志 できるだけ早くご連絡ください。

Pythonとそのさまざまなアプリケーションに関する詳細な知識を得るには、ライブに登録できます。 24時間年中無休のサポートと生涯アクセス。