Python の Concurrent Future: 並列タスクを簡単に起動

WBOY
リリース: 2024-08-05 22:52:02
オリジナル
943 人が閲覧しました

Concurrent Futures in Python: Launching Parallel Tasks with Ease

並列実行を通じて最適なパフォーマンスを達成することが不可欠です。多用途のプログラミング言語である Python には、同時実行のためのツールがいくつか用意されています。最も強力でユーザーフレンドリーなモジュールの 1 つは concurrent.futures で、開発者はこれを使用して呼び出しを非同期に実行できます。この記事では、このモジュールの機能と、それをファイル操作や Web リクエストなどのさまざまなタスクに活用する方法について説明します。

コンカレント先物の概要

concurrent.futures モジュールは、呼び出しの非同期実行を容易にする Executor として知られる抽象クラスを提供します。これを直接使用すべきではありませんが、開発者は ThreadPoolExecutor や ProcessPoolExecutor などの具体的なサブクラスを利用して、タスクを同時に実行できます。

主な特長

  1. Submit メソッド: submit メソッドは魔法が起こる場所です。呼び出し可能な関数が非同期で実行されるようにスケジュールし、Future オブジェクトを返します。呼び出し可能な関数は指定された引数を使用して実行されるため、開発者はバックグラウンド タスクをシームレスに実行できます。
   with ThreadPoolExecutor(max_workers=1) as executor:
       future = executor.submit(pow, 323, 1235)
       print(future.result())
ログイン後にコピー

この例では、ThreadPoolExecutor を使用して、別のスレッドで数値をべき乗します。

  1. Map メソッド: Map メソッドは、複数の入力反復可能オブジェクト間で関数を同時に実行できるようにするもう 1 つの優れた機能です。反復可能オブジェクトをすぐに収集し、呼び出しを非同期に実行します。
   results = executor.map(load_url, URLS, timeout=2)
ログイン後にコピー

この機能は、並行して実行するタスクのリストがある場合に特に便利です。

実用的な応用: ファイルのコピー

複数のファイルを効率的にコピーする必要があるシナリオを考えてみましょう。次のコード スニペットは、ThreadPoolExecutor を使用してファイルを同時にコピーする方法を示しています。

import concurrent.futures
import shutil

files_to_copy = [
    ('src2.txt', 'dest2.txt'),
    ('src3.txt', 'dest3.txt'),
    ('src4.txt', 'dest4.txt'),
]

with concurrent.futures.ThreadPoolExecutor() as executor:
    futures = [executor.submit(shutil.copy, src, dst) for src, dst in files_to_copy]
    for future in concurrent.futures.as_completed(futures):
        print(future.result())
ログイン後にコピー

この例では、shutil.copy 関数を利用してファイルのコピーを並行して実行し、大規模なファイル操作のパフォーマンスを大幅に向上させます。

Web リクエストの同時処理

concurrent.futures モジュールのもう 1 つの興味深いアプリケーションは、複数の URL からコンテンツを一度に取得することです。以下は、ThreadPoolExecutor を使用して Web ページを取得する簡単な実装です:

import concurrent.futures
import urllib.request

URLS = [
    'http://www.foxnews.com/',
    'http://www.cnn.com/',
    'http://europe.wsj.com/',
    'http://www.bbc.co.uk/',
    'http://nonexistant-subdomain.python.org/',
]

def load_url(url, timeout):
    with urllib.request.urlopen(url, timeout=timeout) as conn:
        return conn.read()

with concurrent.futures.ThreadPoolExecutor() as executor:
    results = executor.map(load_url, URLS, timeout=2)
    for result in results:
        print(result)
ログイン後にコピー

このコードは、Web コンテンツを迅速に取得する簡単な方法であり、プロジェクトでの同時実行の実装がいかに簡単であるかを示しています。

結論

concurrent.futures モジュールは、Python でタスクを非同期に実行する強力な方法を提供し、アプリケーションで並列処理を実現するプロセスを簡素化します。 Executor クラスと、submit や map などのメソッドを通じて、開発者は、ファイル操作、Web リクエスト、またはその他の I/O バウンド プロセスに関係するバックグラウンド タスクを効率的に管理できます。

これらのテクニックをプログラミングの実践に組み込むことで、より応答性が高く効率的なアプリケーションを作成できるようになり、パフォーマンスとユーザー エクスペリエンスの両方が向上します。コーディングを楽しんでください!

以上がPython の Concurrent Future: 並列タスクを簡単に起動の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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