2

Pythonの複数のスレッド間で値(整数、配列など)を渡す方法を探しています。このタスクはQueueモジュールを使用して実行できることは理解していますが、Pythonやこの特定のモジュールについてはあまり詳しくありません。

次のシナリオがあります。各スレッドは、独自のデータまたは他のスレッドからのデータに基づいて計算を行う必要があります。また、各スレッドは、特定のジョブに必要なデータを保持している他のスレッドを認識しています(すべてのスレッドにはすべてのスレッドの配列があるため、タスクXの場合、特定のスレッド(row、col)からデータを取得する必要があることをスレッドは認識しています。その配列から)。

キューモジュールまたはおそらく別の手法を使用して、スレッド間のこの通信をどのように行うことができますか(キューモジュールはこのジョブに適しているように見えました)。どんな助けでも大歓迎です。どうもありがとう。

4

1 に答える 1

2

キューの使用

通常、キューは、キューからジョブを取得する多数のワーカースレッドがあるシナリオで使用されます。空きスレッドは、新しいジョブがキューに入れられるのをキューで待機しています。次に、残りのすべてのスレッドが次のジョブを待機している間に、スレッドによってジョブが実行されます。利用可能なスレッドよりも多くのジョブが投稿されている場合、キューはいっぱいになり始めます。

あなたがそれを説明するとき、それはあなたのシナリオには当てはまりません。たぶん、データをキューに入れずに直接読み取ることができます。共有データ構造を書き込む場合は、ロック戦略を検討できます。

一般的な並列プログラミングについて読んでおく必要があります。概念はかなり言語に依存しません。次に、Pythonを使用したスレッドに関するチュートリアルを読むことができます。両方のトピックについてインターネット上にたくさんの資料があります。

編集:

threading.Eventを使用したスレッド間の通信

2つのスレッド間で通信する最も簡単な方法はthreading.Eventです。イベントはtrueまたはfalseに設定できます。通常、1つのスレッドがイベントを設定し、別のスレッドがイベントの値をチェックしてそれに応じて動作します。たとえば、イベントは、何か新しいことをする必要があることを示している可能性があります。指示スレッドは、最初に次のタスクに必要なデータ構造を埋めてから、イベントをtrueに設定します。イベントが真になった後、イベントを待機していた別のスレッドがアクティブ化されます。続いて、データ構造を読み取り、タスクを実行します。

于 2013-03-20T13:23:22.537 に答える