2017-04-25 14 views
1

私はPythonでASCIIデータを共有している3つのスレッドを持っています。最初のスレッドは、シリアルポートからシリアルデータを非常に高速で読み込みます。次に、そのデータを解析して、書き込まれたソケットに渡します。さらに、シリアルデータからのデータの一部はXMLファイルに書き込まれます。グローバルなインタプリタのロックとその限界を認識しています。私は1/10秒以内にこれらの操作をすべて行う必要があります。スレッド間で共有するグローバル値を利用することで、大量のCPU使用量と遅延が発生しています。私は他の苦労者と同じように、私がPythonでイベントを使うことはできないと思います。データスレッド間でデータを渡すにはどうすればよいですか?

これらのスレッド間でデータを共有するにはどうすればよいですか?

答えて

3

私はこれを実装するための最良の方法は、Pythonのキューモジュールを使用することであると思う: https://docs.python.org/2/library/queue.html

キューは基本的にリストされているが、彼らは、スレッドセーフであると「取得」関数が効率的に何らかのまでスレッドをブロックしていますデータがそこにエンキューされます。 CPUの方が効率的でなければなりません。

+0

ありがとうございます。私は先に進んで、私が使用していたグローバル変数を最大サイズ1のスレッディングFIFOキューに変換しました。スレッドセーフな環境では、一度に1つのアイテムしかハンドオフできませんでした。さらに、私は速く実行していた他のスレッドを持っていました。だから私はそれらを遅くし、私の時間に敏感なスレッドのCPU使用量を減らすためにキューを使用しました。 GILが本当に私のCPUに大混乱を招くことが分かった。 – Speakeasys

関連する問題