GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

alex-sherman

deco – 説明、ウェブサイト、またはトピックは提供されていません

投稿日:

説明、ウェブサイト、またはトピックは提供されていません。

並行処理された

Pythonのための単純化された並列計算モデル。 DECOは自動的にPythonプログラムを並列化し、既存のシリアルプログラムを最小限に変更する必要があります。

pipを使ってインストールする:

pip install deco

ドキュメンテーション

Wiki on Githubを参照すると、より詳細なドキュメントが得られます。

一般的な使用法

DECOを使用するのは、Pythonプログラムで2つの関数を見つけたり作成したりするのと同じくらい簡単です。 最初の関数は並行して実行したいもので、 @concurrentで装飾されてい@concurrent 2番目の関数は@concurrent関数を呼び出し、 @synchronized @concurrent関数です。 2番目の関数をデコレートすることはオプションですが、いくつかの非常にクールなメリットがあります。 例を見てみましょう。

@concurrent # We add this for the concurrent function
def process_lat_lon(lat, lon, data):
  #Does some work which takes a while
  return result

@synchronized # And we add this for the function which calls the concurrent function
def process_data_set(data):
  results = defaultdict(dict)
  for lat in range(...):
    for lon in range(...):
      results[lat][lon] = process_lat_lon(lat, lon, data)
  return results

つまり、このプログラムを並列化するために必要なのは、2つの変更点だけです。 これで、このプログラムは実行中のマシン上のすべてのコアを利用して、実行速度を大幅に向上させます。

それは何ですか

  • @concurrentデコレータはmultiprocessing.poolを使用して、ターゲット関数への呼び出しを並列化します
  • 関数引数のインデックス付きの突然変異は自動的に処理されますが、プールは実行できません
  • @synchronizedデコレータは自動的に同期イベントを挿入します
  • また、同期イベント中に発生する@concurrent関数呼び出しの結果の割り当てを自動的にリファクタリングします

制限事項

  • @concurrentデコレータは@concurrentより長い時間を要する機能の速度を向上させます
    • 時間がかかりすぎるとコードが遅くなります!
  • @synchronizedデコレータは ‘単純な’関数でのみ機能し、関数が以下の基準を満たしていることを確認します
    • 呼び出しのみ、または以下のようなインデックス可能オブジェクトに@concurrent関数の結果を@concurrentます。
      • 同時(…)
      • 結果[キー] =並行(…)
    • @concurrent関数の呼び出しによって割り当てられるオブジェクトを間接的に読み取ることはありません

使い方

作業中のメカニズムの詳細な議論については、 ここで見つけることができるクラスの論文を書いた。

概要として、DECOは主にPythonのマルチプロセッシングのためのスマートなラッパーです。 @concurrentが関数に適用されると、それをpool.apply_asyncの呼び出しで置き換えます。 さらに、引数がpool.apply_asyncに渡されると、DECOはインデックス変更可能オブジェクトをプロキシに置き換え、これらのオブジェクトの突然変異を検出して同期させることができます。 これらの呼び出しの結果は、同時イベントでwait()を呼び出して同期イベントを呼び出すことで取得できます。 これらのイベントは@concurrent関数を呼び出す関数で@concurrentデコレータを使用することでコードに自動的に配置できます。 さらに、 @synchronizedを使用している間に、同時関数呼び出しの結果をインデックス変更可能オブジェクトに直接割り当てることができます。 これらの割り当ては、次の同期イベント中に自動的に発生するようにDECOによってリファクタリングされます。 これは、多くの場合、DECOを使用した並列プログラミングは、より簡単なシリアルプログラミングとまったく同じように見えることを意味しています。







-alex-sherman

執筆者: