ホームページ >バックエンド開発 >Python チュートリアル >マルチスレッドとマルチプロセッシングのための優れた Python テクニック: アプリのパフォーマンスを向上させる

マルチスレッドとマルチプロセッシングのための優れた Python テクニック: アプリのパフォーマンスを向上させる

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-27 18:12:14420ブラウズ

owerful Python Techniques for Multithreading and Multiprocessing: Boost Your App Performance

幅広い本の本については、Amazonの著者ページを探索してください。 より多くの洞察と更新について、Mediumで私をフォローしてください!あなたのサポートは大歓迎です。

Pythonのマルチスレッドおよびマルチプロセッシング機能のパワーのロックを解除して、アプリケーションの速度と効率を劇的に改善します。このガイドは、これらの機能を効果的に活用するための8つの重要なテクニックを発表します。

スレッドはI/Oバインド操作で優れています。 Pythonの

モジュールは、スレッド管理用のユーザーフレンドリーなインターフェイスを提供します。 複数のファイルを同時にダウンロードする方法は次のとおりです threading

このコードは、各ダウンロードを別のスレッドに割り当て、同時実行を可能にします。 CPUバウンドタスクの場合、Pythonのグローバルインタープリターロック(GIL)により、
<code class="language-python">import threading
import requests

def download_file(url):
    response = requests.get(url)
    filename = url.split('/')[-1]
    with open(filename, 'wb') as f:
        f.write(response.content)
    print(f"Downloaded {filename}")

urls = ['http://example.com/file1.txt', 'http://example.com/file2.txt', 'http://example.com/file3.txt']

threads = []
for url in urls:
    thread = threading.Thread(target=download_file, args=(url,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

print("All downloads complete")</code>
モジュールは優れています。 マルチプロセスは、それぞれが独自のメモリスペースとギルを備えた独立したプロセスを作成し、ギルの制限を避けます。 並列計算の例は次のとおりです

これにより、プロセスプールを使用して計算を効率的に配布します

モジュールは、スレッドとプロセスの両方でシームレスに動作する非同期タスク実行のためのより高いレベルの抽象化を提供します。 これがmultiprocessing

を使用した例です
<code class="language-python">import multiprocessing

def calculate_square(number):
    return number * number

if __name__ == '__main__':
    numbers = range(10)

    with multiprocessing.Pool() as pool:
        results = pool.map(calculate_square, numbers)

    print(results)</code>

これにより、5つのワーカータスクを管理するスレッドプールが作成されます。 非同期I/Oの場合、

モジュールが輝き、コルーチンを使用した効率的な非同期プログラミングを可能にします。例を次に示します:

concurrent.futures ThreadPoolExecutorこれにより、複数のURLからコンテンツを効率的に取得します。

<code class="language-python">from concurrent.futures import ThreadPoolExecutor
import time

def worker(n):
    print(f"Worker {n} starting")
    time.sleep(2)
    print(f"Worker {n} finished")

with ThreadPoolExecutor(max_workers=3) as executor:
    executor.map(worker, range(5))

print("All workers complete")</code>
プロセス間のデータ共有には、特定のツールが必要です。

モジュールは、共有メモリのようなメカニズムを提供します。

これは、複数のプロセスにわたって安全なカウンター増分を示しています asyncioスレッドの同期により、複数のスレッドが共有リソースにアクセスすると、人種条件が防止されます。 Pythonは、

<code class="language-python">import asyncio
import aiohttp

async def fetch_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = ['http://example.com', 'http://example.org', 'http://example.net']
    tasks = [fetch_url(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for url, result in zip(urls, results):
        print(f"Content length of {url}: {len(result)}")

asyncio.run(main())</code>
のような同期プリミティブを提供しています

この例では、ロックを使用してアトミックカウンターの増分を確保します。

multiprocessingは、CPUバウンドタスクに最適です。 プライムナンバーを見つけるための例は次のとおりです Value これにより、複数のプロセスにわたってプライムナンバーチェックが分配されます

マルチスレッドとマルチプロセッシングのどちらを選択するかはタスクによって異なります。 I/O バウンドのタスクはマルチスレッドの恩恵を受けますが、CPU バウンドのタスクは多くの場合、真の並列処理のためにマルチプロセッシングを必要とします。 負荷分散とタスクの依存関係は、並列処理において重要な考慮事項です。 共有リソースを扱う場合は、適切な同期メカニズムが不可欠です。 パフォーマンスの比較は、タスクとシステムによって異なります。 データ処理や科学計算では、マルチプロセッシングが非常に効果的です。 Web アプリケーションの場合、asyncio は同時接続の効率的な処理を提供します。 Python の多様な並列処理ツールにより、開発者は高性能のアプリケーションを作成できます。


101 冊

101 Books は、著者 Aarav Joshi が共同設立した AI を活用した出版社で、手頃な価格で高品質の書籍を提供しています。一部の書籍の価格は $4.

Amazon で Golang Clean Code の本をご覧ください。 Aarav Joshi を検索して、さらに多くのタイトルや特別割引を見つけてください!

その他のプロジェクト

他のプロジェクトをご覧ください: インベスター セントラル (英語、スペイン語、ドイツ語)、スマート リビングエポックズ & エコーズパズル ミステリーヒンドゥーヴァエリート開発者、およびJS スクール


Medium でフォローしてください

Medium で私たちとつながりましょう: Tech Koala InsightsEpochs & Echoes WorldInvestor Central MediumPuzzling Mysteries Mediumサイエンス & エポックズ ミディアム、および現代ヒンドゥーヴァ.

以上がマルチスレッドとマルチプロセッシングのための優れた Python テクニック: アプリのパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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