私は、条件が満たされていないときにブール値Falseを出力する外部デバイスを監視しています。条件が満たされたときにブール値Trueを返します。 問題は、条件が満たされた後にブール値が複数回出力されることです。 Pythonでブール値が変更されたときに関数を一度実行する方法は?
この
は、出力は次のようになります。False
False
False
False
True
True
False
False
False
は、だから私は行うことができるようにしたいと思い何時間ごとに一度だけ、簡単な関数を、この値を監視し、実行している偽のブール値の変化に真実。私は単純な "変更"機能を持っている他の言語を見てきました。その可能性があり、おそらくもっと簡単になることがわかっています。
現在、私はこれを持っています。これを説明するために、変数 "ext_data"がpythonスクリプトが監視している外部データとして使用されます。
while True:
if ext_data == True:
print("true")
pass
これはブール値trueに等しく、それは自分自身をリセットすると、ブールがまだTrueに設定されているので、私は一つだけをしたいときに私は、複数の測定値を取得するたびに「真」出力します。
助けてくれたおかげで!
編集:
がholdenwebによって書かれたEdgeDetectorクラスを使用してコードを更新しました。
ext_data = True/False # This returns True or False depending on the state
# of the variable. It is constantly monitored and
# could change at any moment, which is why I'm
# running the function in a while True loop
def printer():
print(u'something%s' % serialport.cts)
post_to_api('cycle_count')
def myfunction():
return ext_data
test_subject = EdgeDetector(myfunction, printer)
while True:
test_subject.test()
これでも時折重複した投稿が返されます。このデータはEdgeDetectorクラスが正しく動作するための配列である必要がありますが、無限に長い配列を作成せずにこのデータを配列に配置することをどのように提案しますか?
です。私の知る限り、アレイにデータを格納することについて言及した唯一の人物はあなたでした。それが「重複する投稿を返す」と言うと、どうやってそれを決定していますか?実際問題としては、バグがなければ(常に可能)、最初にハイからローへの遷移がない限り、コードがエッジを検出することは不可能です(技術的には本当にRisingEdgeDetectorと呼ぶべきですが、これは信号の極性に関する知識)。あなたがポーリングしているので、短命のパルスを見逃す可能性があります。 – holdenweb