Python でマルチスレッドを使用するにはどうすればよいですか?

王林
リリース: 2023-06-03 18:21:06
オリジナル
3307 人が閲覧しました

コンピュータの発展に伴い、処理する必要のあるデータはますます大きくなり、一部のタスクは完了するまでに長い時間がかかるようになりました。プログラムの効率を向上させるために、多くのプログラマは、プログラムが複数のサブタスクを同時に実行できるようにするマルチスレッド テクノロジに注目し始めています。この記事ではPythonでマルチスレッドを利用する方法を紹介します。

1. マルチスレッドとは何ですか?

プログラミングにおいて、スレッドとは、独立して実行できるプログラム内の最小単位を指します。シングルスレッド プログラムと比較して、マルチスレッド プログラムは複数のタスクを同時に実行できます。つまり、完了する必要のあるタスクが複数ある場合、マルチスレッドを使用してこれらのタスクを異なるスレッドで同時に実行できるため、プログラムに必要な時間を短縮できます。

2. なぜマルチスレッドを使用するのでしょうか?

シングルスレッド プログラムを使用する場合、2 つの長期にわたるタスク A と B を完了したい場合は、それらを順番に実行する必要があります。つまり、タスク A に 10 秒かかる場合、タスク B を実行する前に 10 秒待つ必要があります。これを行うと、プログラムの効率が非常に低くなります。

しかし、マルチスレッド技術を使用してタスク A とタスク B を同時に実行すると、両方に 10 秒かかるとしても、合計時間はわずか 10 秒になります。そうすることで効率が向上するだけでなく、時間の節約にもなります。

3. Python でのマルチスレッド

Python は、スレッド モジュールを使用してマルチスレッドを実装します。スレッド モジュールには、主に次の重要なクラスがあります。

  • Thread: このクラスは別のスレッドを表します。
  • Lock: このクラスは、競合やデータ破損を避けるために、複数のスレッドによる共有リソースへのアクセスを制御するために使用されます。
  • RLock: このクラスは Lock に似ていますが、同じスレッドが複数回ロックを取得できるようにします。
  • 条件: このクラスは、複数のスレッド間の調整と通信に使用されます。

さらに、current_thread()、enumerate() など、マルチスレッド プログラミングをサポートするために使用される関数やメソッドがいくつかあります。

以下では、threading.Thread クラスを使用して実装するマルチスレッドの例を示します。

4. 例

時間のかかるタスクと短いタスクをシミュレートする単純なスレッドを作成します。マルチスレッドの有用性を示すために、2 つのスレッドを使用して両方のタスクを実行します。

まず、スレッド モジュールを導入する必要があります。

import threading
ログイン後にコピー

次に、2 つの関数を定義します。1 つは時間のかかるタスクをシミュレートし、もう 1 つはより短いタスクをシミュレートします。これら 2 つの関数は、それぞれ time モジュールの sleep() メソッドを使用して、タスクの実行時間をシミュレートします。

import time
 
def long_task():
  print('开始执行一个耗时的任务')
  time.sleep(5)   # 模拟任务执行时间为5秒钟
  print('执行完毕')
 
def short_task():
  print('开始执行一个较短时间的任务')
  time.sleep(2)   # 模拟任务执行时间为2秒钟
  print('执行完毕')
ログイン後にコピー

次に、threading.Thread クラスを使用して 2 つのスレッドを作成し、各スレッドが上記の 2 つの関数をそれぞれ実行します。

t1 = threading.Thread(target=long_task)   # 创建线程1
t2 = threading.Thread(target=short_task)  # 创建线程2
 
t1.start()   # 启动线程1
t2.start()   # 启动线程2
 
t1.join()    # 等待线程1运行完毕
t2.join()    # 等待线程2运行完毕
 
print('程序运行结束')
ログイン後にコピー

上記のコードでは、threading.Thread クラスを使用して 2 つのスレッド t1 と t2 を作成します。各スレッドは上記で定義した 2 つの関数をタスクとして使用します。このうち、long_task() は長期タスクに使用され、short_task() は短期タスクに使用されます。

メインスレッドでは、start() メソッドを使用して 2 つのスレッドを開始します。 start() メソッドは、スレッドの run() メソッドを呼び出してタスクを実行します。次に、 join() メソッドを使用して、両方のスレッドの実行が終了するのを待ちます。

最後に、プログラムが終了したことを知らせるために「Program End」を出力します。

上記のコードを実行すると、次の出力が表示されます。

开始执行一个耗时的任务
开始执行一个较短时间的任务
执行完毕
执行完毕
程序运行结束
ログイン後にコピー

より短いタスクを実行するスレッドが、時間のかかるタスクを実行するスレッドよりも前に終了することがわかります。これは、マルチスレッドによってプログラムの効率が向上することを示しています。

この例は単純ですが、Python を使用してマルチスレッド プログラミングを行う方法を示しています。

5. 概要

この記事では、マルチスレッド プログラミングの概念と利点、および Python がスレッド モジュールを使用してマルチスレッド プログラミングをサポートする方法について紹介しました。サンプル コードは、スレッドの作成方法、スレッド タスクの定義方法、およびスレッドの実行順序の制御方法を示します。

マルチスレッドは、大量のデータを処理したり、時間のかかるタスクを実行する必要がある場合に非常に便利なツールです。この記事が、マルチスレッドの基本概念と Python でのマルチスレッドの使用方法を理解するのに役立つことを願っています。

以上がPython でマルチスレッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート