ホームページ >バックエンド開発 >Python チュートリアル >`map` と `pool` を使用して Python のマルチスレッドでコードの効率をどのように向上させることができるでしょうか?

`map` と `pool` を使用して Python のマルチスレッドでコードの効率をどのように向上させることができるでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 07:44:14347ブラウズ

How Can Python's Multithreading Enhance Code Efficiency Using `map` and `pool`?

Python でのスレッドの利用

進化し続けるプログラミングの世界では、コード効率を高めるためにマルチ スレッドの利用がますます重要になってきています。 。この記事は、Python の複数のスレッドにタスクを効果的に分散する方法を示す包括的な例を提供することを目的としています。

マップとプールを使用したマルチスレッド

最新の Python は、非常にシンプルです。マップとプールの導入によりマルチスレッド化されます。以下のコード スニペットは、「1 行の並列処理」に関する有名な記事から派生したもので、このアプローチの威力をエレガントに示しています。

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
results = pool.map(my_function, my_array)

このマルチスレッド コードは、次のシングル スレッド バージョンと同等の機能を果たします。

results = []
for item in my_array:
    results.append(my_function(item))

マップを理解する

マップ、a Python の多用途関数。シーケンス内の各要素に指定された関数を適用することで並列処理を簡素化します。シーケンスを効率的に繰り返し、関数を実行し、結果をリストに集約します。

マルチプロセッシングとダミー マルチプロセッシング

マルチプロセッシングとそのあまり知られていない兄弟であるマルチプロセッシング.dummy は、map 関数の並列バージョンを提供します。マルチプロセッシングでは複数のプロセスが使用されますが、ダミー バリアントではスレッドが使用されるため、入出力集中型のタスクに最適です。

multiprocessing.dummy による実装

次のコードを考えてみましょう。スニペット。multiprocessing.dummy を利用して複数の URL を開きます。同時実行:

import urllib2
from multiprocessing.dummy import Pool as ThreadPool

urls = [
  'http://www.python.org',
  'http://www.python.org/about/',
  'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
  'http://www.python.org/doc/',
  'http://www.python.org/download/',
  'http://www.python.org/getit/',
  'http://www.python.org/community/',
  'https://wiki.python.org/moin/',
]

pool = ThreadPool(4)
results = pool.map(urllib2.urlopen, urls)
pool.close()
pool.join()

タイミングの結果は、複数のスレッドを使用した大幅なパフォーマンスの向上を示しています:

Single thread:   14.4 seconds
       4 Pool:   3.1 seconds
       8 Pool:   1.4 seconds
      13 Pool:   1.3 seconds

複数の引数の受け渡し

Python 3.3 および後で、以下を使用して、プール内の関数に複数の引数を渡すことが可能になります。テクニック:

  • 複数の配列の受け渡し:
results = pool.starmap(function, zip(list_a, list_b))
  • 定数と配列の受け渡し:
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))

以上が`map` と `pool` を使用して Python のマルチスレッドでコードの効率をどのように向上させることができるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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