2017-02-13 7 views
0

特定の時間が経過した後にブール値を切り替える必要がありますが、残りのコードは通常どおり実行されます。コードの主要部分で起こることはBoolの値に依存します。特定の時間が経過した後に変数を変更するPython

私はgoodguyの提案で私の試みをしていますが、まだ動作させることができません。クラスを呼び出すと「再生」がTrueに切り替わりますが、2秒後にFalseに戻っても音は1回しか再生されません。私は間違って何をしていますか?

class TimedValue: 

    def __init__(self): 
     self._started_at = datetime.datetime.utcnow() 

    def __call__(self): 
     time_passed = datetime.datetime.utcnow() - self._started_at 
     if time_passed.total_seconds() > 2: 
      return False 
     return True 

playing = False 
while True: 
    trigger = randint(0,10) # random trigger that triggers sound 
    if trigger == 0 and playing == False: 
    #play a tone for 2 seconds whilst the random triggers continue running 
    #after the tone is over and another trigger happens, the tone should play again 
     thread.start_new_thread(play_tone, (200, 0.5, 2, fs, stream,)) 
     value = TimedValue() 
     playing = value() 

    time.sleep(0.1) 
+0

の他の部分で呼び出し可能なものとして使用value()は、あなたのためのコードを含めることができます別の可能な方法は、例えば、それが測定のために作成された時間を記憶して呼び出し可能なクラスのようなものを定義することですこれまでの最善の試み?開始の基礎がある場合は、問題を理解するのがずっと簡単です。 – roganjosh

+0

それは大丈夫ですか?私は本当に最高の試みをしていない、何も働いていない。 – ElanaLS

答えて

0

あなたはモジュールmultiprocessingからThreadPoolクラスを使用することができます。

import time 

myBool = False 

def foo(b): 
    time.sleep(30) #time in seconds 
    return not b 

from multiprocessing.pool import ThreadPool 

pool = ThreadPool(processes=1) 
result = pool.apply_async(foo,[myBool]) 

b = result.get() 
1

スレッドとマルチプロセッシングは、この場合のためにやり過ぎのように聞こえます。

import datetime 

class TimedValue: 

    def __init__(self): 
     self._started_at = datetime.datetime.utcnow() 

    def __call__(self): 
     time_passed = datetime.datetime.utcnow() - self._started_at 
     if time_passed.total_seconds() > XX: 
      return True 
     return False 

value = TimedValue() 

とコード

+0

クラスから返された値を取得する方法は?申し訳ありませんが、私はこれに新しいです...私はTimedValueを印刷しようとしましたこれは私が持っているものです: <__ main __。TimedValueインスタンス0x1049e33b0> – ElanaLS

+0

彼は言ったように。 value = TimedValue()を呼び出し、値が必要なときはいつでもvalue()を呼び出します。 –

+1

実際、 '__call__'を使用してもちょっと残念です。プロパティは、初心者のIMHO(my_timed_value.value)の把握がやや簡単です。 +1は、マルチプロセスを行う方法(XY問題を避ける)ではなく、ニーズに答える方法を示すためのものです。 –

関連する問題