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 サイトの他の関連記事を参照してください。