2016-11-18 14 views
1

このような質問は既に聞かれていますので、ある意味ではこれは複製です。しかし、私はそれらの質問の多く、そして多くのウェブサイトを見てきましたが、私はまだこの質問のタイトルが何をするのかを理解することができません。イベントが発生した場合は、Pythonでスレッドを起動してください

1つのスレッドt_sensorsはセンサーから値を読み取り、その後にrefresh_rate秒の間スリープ状態になります。これは数時間である可能性があります。そのため、この時間中にセンサからの値の読み込みを再度要求する可能性があります。この要求は、t_checkerのスレッドから取得され、Firebaseデータベース内のデータをチェックし、そのデータに基づいて、t_sensorsを起動するかどうかを選択します。

def start_sensors(self): 
    # do some stuff... 
    # refreshes every refresh_rate secs 
    refresh_rate = firebase_root.get('/settings', 'refreshRate') 
    condition.wait(refresh_rate) 

def check_for_plants(self): 
    while True: 
     modded_plants = firebase_root.get('/modifiedPlants', '') 
     print(modded_plants) 
     for plant, properties in modded_plants.items(): 
      print properties['status'] 
      if properties['status'] == 'modified': 
       condition.notify() 
       print("Notified") 

condition = threading.Condition() 
t_sensors = threading.Thread(target=start_sensors, args=(condition,)) 
t_checker = threading.Thread(target=check_for_plants, args=(condition,)) 
condition.acquire() 
t_sensors.start() 
t_checker.start() 

私は条件を正しく使用していないことを知っていますが、どこで問題を修正する必要があるのか​​は分かりません。本当に、本当にありがとうございます。

+1

['waiting'](https://pypi.python.org/pypi/waiting)ライブラリをチェックしてください。 – erip

+1

t_checkがチェックしたい場合にタイマーをリセットしたくない、あるいはそのサイクルを続けるのは好きですか? – Simon

+0

@eripありがとう、ありがとう。私はそれをチェックし、それがどのようになっているかを知らせます。 –

答えて

0

最後に、スレッドを完全に避けるように選択しました...私はそれらが不要であることがわかりました。代わりに、私はrefresh_rateの値をcheck_for_plants()start_sensors()から渡してから、時間がなくなるまで2秒ごとにスリープ状態になり、イベントが発生した場合はstart_sensors()と呼ばれます。すべての助けをありがとう!

関連する問題