2017-10-20 5 views
1

私は、10msごとに(外部デバイスからキャプチャした)電圧値を測定し、いくつかの基本ローパスフィルタリングを適用し、その値を変数lp_voltageに保存するスレッドを持っています。数秒ごとに、メインプログラムはlp_voltageに格納された値を読み取る必要があります。スレッドでglobalキーワードを使用して、Pythonの1つのスレッドから値を読み取り:キュー変数またはグローバル変数?

  • Sharing the global variable lp_voltage between the thread and the main program

    私はおそらくthreadingフレームワークとそれを行うには2つの方法を考え出しました。これは、グローバルな小数点記号(often considered bad practice)を使用しなければならないという不都合があります。

  • Using the Queue module詳細はpythonicです。しかし、私は問題のためにそれをどのように適応させるのか分かりません。メインプログラムは時々、lp_voltageの瞬時値にアクセスするだけで、データの完全なキューにはアクセスできません。

どのオプションが最適ですか?キューが改善されている場合は、どのように問題に適応させるのですか?

答えて

1

あなたが行っていることを知っている場合、最初の方法は問題ありません。

詳細な説明:

両方の方法では、あなたの2つのスレッドが共有変数(lp_voltageまたはv_queue)へのアクセス権を持っていることを確認する必要があります。実際の利点v_queueが持っているものは一貫性です。一貫性を気にしない場合は、単に変数を使用するだけです。

このようにもっとpythonicを実装するには、プロジェクト全体をobjectにラップすることができます。例:

class VoltageTask: 

    def __init__(self): 
     self.lp_voltage = 0 
     self.thread = Thread(target=self.update_voltage) 

    def update_voltage(self): 
     self.lp_voltage = your_function_to_get_voltage() 

    def main_thread(self): 
     ... 

    def start(self): 
     self.thread.start() 
     self.main_thread() 


if __name__ == "__main__": 
    task = VoltageTask() 
    task.start() 
+0

私が提案したようなソリューションを使用してしまって、うまくいきました。唯一の違いは、クラスからメインコードを取り出し、 'task'オブジェクトの' lp_voltage'プロパティを読み出すことです。 –

関連する問題