ホームページ よくある問題 Pythonのスレッドプールとマルチスレッドの違い

Pythonのスレッドプールとマルチスレッドの違い

Jun 20, 2023 pm 04:51 PM
Pythonスレッドプール

Python スレッド プールとマルチスレッドの違い: 1. スレッドはプロセスの下で移動します; 2. スレッドはプロセスの下で移動します; 3. プロセスには複数のスレッドを含めることができます; 4. プロセス間でデータを共有するのは困難です異なるプロセス ;5. プロセスはスレッドよりも多くのコンピュータ リソースを消費します。

Pythonのスレッドプールとマルチスレッドの違い

1. スレッドとマルチスレッド

プロセス: プログラムが実行されるとき、それはプロセスと呼ばれることがあります。プログラムおよびプログラムによって使用されるメモリとシステム リソース。プロセスは複数のスレッドで構成されます。

スレッド: スレッドはプログラム内の実行ストリームです。各スレッドには独自のプライベート レジスタとコード領域があります。共有されています。異なるスレッドで同じ機能を実行できます。

複数のスレッド: マルチスレッドとは、プログラムに複数の実行ストリームが含まれていることを意味します。つまり、プログラムは複数の異なるスレッドを同時に実行して異なるタスクを実行でき、単一のプログラムで複数の並列実行スレッドを作成してそれぞれのタスクを完了できます。

マルチスレッドの最大の利点: CPU 使用率の向上 (特に I/O 集中型のプログラムに適しており、速度の向上が特に顕著です)

プロセスとスレッドの違い:

単純なメタファーであること: プロセス = 列車、スレッド = 馬車

スレッドはプロセスの下を移動します (単純な馬車は実行できません)

プロセスには複数のスレッドを含めることができます (列車には複数の馬車を含めることができます) )

異なる工程間でデータを共有するのが難しい(駅の乗り換えなど、ある列車に乗っている乗客が別の列車に乗り換えるのが難しい)

異なる工程間でデータを共有するのが非常に難しい同じプロセス内の異なるスレッド 共有が容易 (車両 A から車両 B への変更が簡単)

#プロセスはスレッドよりも多くのコンピュータ リソースを消費します (複数の車両を使用すると、複数の車両よりも多くのリソースが消費されます)

プロセス間 相互に影響を与えることはありません。1 つのスレッドがハングアップすると、プロセス全体がハングアップします (ある列車は他の列車に影響を与えませんが、列車の中間車両が火災になると、すべての車両に影響します)。

プロセスは複数のマシンに拡張でき、最大複数のコアに適しています (異なる列車が複数の線路で走行でき、同じ列車の車両が異なる線路で走行することはできません)

プロセスによって使用されるメモリ アドレスはロックされる可能性があります。つまり、スレッドが共有メモリを使用する場合、他のスレッドはそのメモリを使用する前に共有メモリの終了を待つ必要があります。 (例: 電車のトイレ) - 「ミューテックス ロック」

プロセスが使用するメモリ アドレスにより、使用を制限できます (例: 電車内のレストラン、最大人数のみが許可されます)入るには、満員の場合はドアで待つ必要があります。誰かが出てくるのを待ってから入る必要があります)-「セマフォ」

2. マルチスレッド スレッド クラス

スレッドclass は最も一般的に使用されるマルチスレッド モジュールです。スレッドの作成方法は次のとおりです:

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, 
daemon=None)
ログイン後にコピー

group: デフォルトは None です。

target: 作成する関数の名前

name: スレッドの名前。デフォルトは 'Thread-N' Form.

args: 呼び出し可能関数のパラメータタプルパラメータ target で渡されるオブジェクト。

#kwargs: パラメータ target で渡される呼び出し可能オブジェクトのキーワード引数辞書。

daemon: デーモン モード属性、デフォルトはなし。

スレッド オブジェクトの重要なメソッド:

start(): スレッドを開始します。スレッド内で run() メソッドが独立して呼び出されます。

run(): これメソッドはスレッドのアクティビティを表します。

join(timeout=None): スレッドが終了するまで現在の呼び出し元スレッドを待機させます。

daemon: スレッドがデーモン スレッドであるか (True または False) を示します。

マルチスレッド インスタンスを作成します:

import random
import threading
import time
def awesome_function(name):
wait_time = random.randint(1, 10)
print('current thread name is :{0} and wait {1} s'.format(name, 
wait_time))
time.sleep(wait_time)
print('thread {} finished.'.format(name))
if __name__ == '__main__':
for i in range(0, 3):
t = threading.Thread(target=awesome_function, args=(i,))
t.start()
ログイン後にコピー

まず、記録した実行結果を確認してください:

上記の例では 3 つのスレッドが開始され、3 つのスレッドがタスクを同時に実行します。 . タスクを最初に完了したスレッド (time.sleep が最も短いスレッド) が最初に結果を出力します。

3. よりよく使用されるスレッド プール クラス ThreadPoolExecutor

新しいスレッドの開始は次のとおりです。オペレーティング システムとの対話が必要なため、非常に高価です。この場合、特に短い存続期間で多数のプログラムを作成する必要がある場合、スレッド プールを使用するとプログラムのパフォーマンスが大幅に向上します。スレッドを使用するときは、スレッド プールの使用を検討する必要があります。スレッド プール。

スレッド プールは、システムの起動時に多数のアイドル スレッドを作成します。プログラムがスレッド プールに関数を送信している限り、スレッド プールは実行のためにアイドル スレッドを開始します。関数の実行が終了しても、スレッドは終了せず、再びスレッド プールに戻り、アイドル状態になり、次の関数を待ちます。同時に、スレッド プールを使用すると、スレッドの同時実行スレッド数を効果的に制御できます。システムに多数の同時スレッドが含まれていると、システムのパフォーマンスが急激に低下し、Python インタプリタがクラッシュすることさえあります。スレッド プールの最大スレッド数パラメータは、システム内の同時スレッドの数を制御できます。

現在主流で使用されているスレッド プールは、concurrent.futures モジュールの ThreadPoolExecutor です:

import random
import time
from concurrent.futures import ThreadPoolExecutor
def awesome_function(name):
wait_time = random.randint(1, 10)
print('current thread name is :{0} and wait {1} s'.format(name, 
wait_time))
time.sleep(wait_time)
print('thread {} finished.'.format(name))
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=3) as t:
for i in range(0, 3):
t.submit(awesome_function, i)
ログイン後にコピー

実行結果は次のように記録されます:

最大容量 3 のスレッド プール オブジェクトを作成し、submit を通じてサブミットします。 実行された関数はスレッド プールに入れられます。スレッド プール内のスレッド (スレッド 2) 実行が完了すると、アイドル状態のスレッド (スレッド 3) がプールに入れられるなど、すべてのスレッドが完了するまでプログラムが終了します。

以上がPythonのスレッドプールとマルチスレッドの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

詳細な検索Deepseek公式ウェブサイトの入り口 詳細な検索Deepseek公式ウェブサイトの入り口 Mar 12, 2025 pm 01:33 PM

2025年の初めに、国内のAI「Deepseek」が驚くべきデビューを果たしました!この無料のオープンソースAIモデルは、OpenAIのO1の公式バージョンに匹敵するパフォーマンスを備えており、Webサイド、アプリ、APIで完全に起動され、iOS、Android、およびWebバージョンのマルチターミナル使用をサポートしています。 DeepSeekの公式Webサイトおよび使用ガイドの詳細な検索:公式Webサイトアドレス:https://www.deepseek.com/sing for webバージョンの手順:上記のリンクをクリックして、DeepSeekの公式Webサイトを入力します。ホームページの[会話の開始]ボタンをクリックします。最初に使用するには、携帯電話検証コードでログインする必要があります。ログインした後、ダイアログインターフェイスを入力できます。 DeepSeekは強力で、コードを書き、ファイルを読み取り、コードを作成できます

Deepseek Webバージョンの公式入り口 Deepseek Webバージョンの公式入り口 Mar 12, 2025 pm 01:42 PM

国内のAI Dark Horse Deepseekは強く上昇し、世界のAI業界に衝撃を与えました! 1年半しか設立されていないこの中国の人工知能会社は、無料でオープンソースのモックアップであるDeepseek-V3とDeepseek-R1で世界的なユーザーから広く称賛されています。 Deepseek-R1は完全に発売され、パフォーマンスはOpenAio1の公式バージョンに匹敵します! Webページ、アプリ、APIインターフェイスで強力な機能を体験できます。ダウンロード方法:iOSおよびAndroidシステムをサポートすると、ユーザーはApp Storeを介してダウンロードできます。 Deepseek Webバージョン公式入り口:HT

deepseekの忙しいサーバーの問題を解決する方法 deepseekの忙しいサーバーの問題を解決する方法 Mar 12, 2025 pm 01:39 PM

DeepSeek:サーバーに混雑している人気のあるAIを扱う方法は? 2025年のホットAIとして、Deepseekは無料でオープンソースであり、OpenAio1の公式バージョンに匹敵するパフォーマンスを備えており、その人気を示しています。ただし、高い並行性は、サーバーの忙しさの問題ももたらします。この記事では、理由を分析し、対処戦略を提供します。 Deepseek Webバージョンの入り口:https://www.deepseek.com/deepseekサーバーに忙しい理由:高い並行アクセス:Deepseekの無料で強力な機能が同時に使用する多数のユーザーを引き付け、サーバーの負荷が過剰になります。サイバー攻撃:Deepseekが米国の金融産業に影響を与えることが報告されています。