Python で並列処理を実装する方法: マルチコアのパワーを解き放つ?

DDD
リリース: 2024-10-22 20:05:01
オリジナル
889 人が閲覧しました

How to Implement Parallelism in Python: Unleashing Multi-Core Power?

質問: Python での並列処理の採用

C では、OpenMP は並列プログラミングの強力なサポートを提供します。ただし、Python にはこの便利なツールがありません。特に独立関数が並列化を必要とするシナリオで、Python プログラムで並列処理を実現するにはどうすればよいですか?

次のコード構造を考えてみましょう:

<code class="python">solve1(A)
solve2(B)</code>
ログイン後にコピー

ここで、solve1 とsolve2 は独立した関数です。目的は、このコードを並列実行して、実行時間を最小限に抑えることです。

提供されたコード スニペットを見てみましょう:

<code class="python">def solve(Q, G, n):
    i = 0
    tol = 10 ** -4

    while i < 1000:
        inneropt, partition, x = setinner(Q, G, n)
        outeropt = setouter(Q, G, n)

        if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
            break
            
        node1 = partition[0]
        node2 = partition[1]
    
        G = updateGraph(G, node1, node2)

        if i == 999:
            print "Maximum iteration reaches"
    print inneropt</code>
ログイン後にコピー

setinner 関数と setouter 関数を並列化することを目的としています。

答え: マルチプロセッシング モジュールで並列パワーを解き放つ

マルチプロセッシング モジュールは、Python での並列プログラミングのための強力なソリューションを提供します。これにより、複数の CPU コアの処理能力を利用して、タスクを同時に実行できる複数のプロセスを生成できます。

提供されたコードでは、処理プールを使用できます。その方法は次のとおりです。

<code class="python">from multiprocessing import Pool

pool = Pool()
result1 = pool.apply_async(solve1, [A])    # evaluate "solve1(A)" asynchronously
result2 = pool.apply_async(solve2, [B])    # evaluate "solve2(B)" asynchronously
answer1 = result1.get(timeout=10)
answer2 = result2.get(timeout=10)</code>
ログイン後にコピー

このコード スニペットは、solve1 関数とsolve2 関数を非同期で実行するプロセスのプールを作成します。各 CPU コアは 1 つのプロセスを同時に実行できるため、実行時間を効果的に短縮できます。

タスクを並列化する別の方法は、map 関数を使用することです。

<code class="python">args = [A, B]
results = pool.map(solve1, args)</code>
ログイン後にコピー

このアプローチでは、solve1 関数をargs リストの各要素を並列に実行します。

ただし、Python での並列プログラミングにはスレッドを使用すべきではないことに注意することが重要です。これは、GIL (グローバル インタプリタ ロック) により、複数のスレッドが Python バイトコードを同時に実行できなくなり、並列処理の潜在的な利点が実質的に無効になるためです。

以上がPython で並列処理を実装する方法: マルチコアのパワーを解き放つ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!