0

Pythonで非常に単純な並列処理をしようとしています。データのリストがあり、要素ごとにまったく同じものを計算し、それをリストとして返したいので、利用可能ないくつかの単純なマップ スタイル モジュールを調べました ( https://wiki.python.org/moin /ParallelProcessing )。

以前は pprocess モジュールを使用していましたが、今回は機能していないようです。forkmap または forkfun の使用を調べましたが、それらの使用方法に関する良い例が実際には見つかりませんでした。

最も使いやすいマップ スタイルの並列処理モジュールとして、何をお勧めしますか? できれば、ある種のチュートリアルを使用してください。

4

1 に答える 1

0

最初に、複数のスレッドを持つことでプログラムがはるかに高速になるかどうかはわかりません(ただし、何が高速化されるかを知りたいと思います)

私は特別なチュートリアル/モジュールを使用せず、マルチプロセッシング インポート プロセス、ロック、キューからの基本的なプロセス/スレッド化を使用します。

マップ外の値をキューに出力する (Queue())

  processess = []
  results_queue = Queue()
  for i in xrange(50):
    p = Process(target=MyMapFunction, args=tab[i*50:(i+1) * 50])
    processess.append(p)
    p.start()
  # Waiting and Reducing...
  all_key_values = {}
  for _ in xrange(50):
    for k, v in results_queue.get():
      all_key_values.setdefault(k, []).append(v)
  # Some sort of check that threads are done but they should be
  for p in processess:
    p.join()


def MyMapFunction(tab):
  return [(x, 2 * x) for x in tab]

マップと同じ方法でリデュースを行い、くだらない i*50 : (i+1) * 50 を修正して、例を示すために簡単に書きました。これは、Python でマルチスレッドを実行するときに使用するパターンです。

于 2013-09-19T20:55:26.570 に答える