2016-05-29 3 views
0

私はPythonでテキストを扱っていますが、Pythonでマルチスレッドを使う方法はまだ分かっていません。テキストT_Sを生成Pythonでプログラムを並列化する

  1. シングルプロデューサーP(データベース/ XML):

    私のユースケースは次のとおりです。

  2. T_sの各テキストは独立して処理することができます。処理されたテキストはT_p集合を構成する。
  3. 結果セットはS.
  4. 単一のスレッドでテキストファイル/ XML /データベースに書き込まれ

データ量は膨大なものであり、全ての処理は、メモリ内の現在のデータを除いて何かを続けることができませんでした。

私は次のようなプロセスを整理します:

  1. プロデューサーQ_sキューにテキストを置きます。
  2. キューからテキストを取得し、ワーカー間で配布する一連のワーカーとマネージャがあります。
  3. 各作業者は、処理されたテキストをQ_pに配置します。
  4. シンクプロセスは、Q_pから処理されたテキストを読み取り、それらを維持します。 プロデューサーそれがマネージャへの入力データソースとシンクを読み取る終了したことを通信することができなければならないこと

Beyound全。

要約。これまでに、Pyの典型的なタスクごとに素晴らしいlib/solutionがあることを知りました。私の現在の仕事には何かありますか?

+0

Googleは「pythonワーカースレッドproducer-consumer howto」で良い結果を得ています。 http://stackoverflow.com/questions/18998520/python-threading-queue-producer-consumer-with-thread-safe –

答えて

2

CPythonの性質(参照)のために、タスクがCPUであり、I/O境界でない場合、スレッドではなく複数のプロセスを使用する必要があります。 Pythonにはmultiprocessingモジュールが付属しています。具体的には、pools、スレッドセーフqueuesです。

場合によっては、各作業者に渡す入力キューと出力キューが必要です。入力キューと出力キューは非同期で入力キューから読み取り、出力キューに書き込みます。単一スレッドのプロデューサ/コンシューマは、それぞれのキューで動作し、メモリに必要なものだけを保持します。ここでの唯一の可能性は、出力の順序が入力の順序と相関しない可能性があることです。

注:JoinableQueueクラスでステータスを伝えることができます。

+0

重要な点を強調してくれたことに感謝します。 _multithreading_モジュールを使用して私が望むことをやっている素敵な入門書を見つけました:https://pymotw.com/2/multiprocessing/communication.html –

関連する問題