アラーム(ファイルbeep.wav
)をループしてアラートを表示しようとしています。クラス属性が正しく割り当てられていません
アラートが閉じられると、にすぐにアラームを停止します。
アラームの再生を制御するスレッドを使用するソリューションを試しています。
しかし、それはエラーがスローされます。
Traceback (most recent call last):
File "test.py", line 28, in <module>
thread.stop()
File "test.py", line 21, in stop
self.process.kill()
AttributeError: 'AlarmThread' object has no attribute 'process'
このエラーがスローになるだろう、なぜ私は本当に知りませんが、しかしself.process
はAlarmThread.stop
が呼び出されたときに、何らかの理由で、割り当てられていない、であるように見えます。
thread.stop
のみthread.start
後に呼ばれるように私のコードから、それが見えますので、これは、私には意味がありません:
import subprocess
import threading
class AlarmThread(threading.Thread):
def __init__(self, file_name="beep.wav"):
super(AlarmThread, self).__init__()
self.file_name = file_name
self.ongoing = None
def run(self):
self.ongoing = True
while self.ongoing:
self.process = subprocess.Popen(["afplay", self.file_name])
self.process.wait()
def stop(self):
if self.ongoing is not None:
self.ongoing = False
self.process.kill()
thread = AlarmThread()
thread.start()
# show_alert is synchronous, an alert must be closed before the script continues
show_alert("1 second timer")
thread.stop()
thread.join()
べき'もしself.process'が' self.processではない間: 'であれば、スレッドは終了するまで待つでしょうか? – theonlygusti
このソリューションはまだ動作しません。 – theonlygusti
@theonlygusti - 穴を塞ぐためにロックをいくつか追加しました。私が書いたいくつかのハッキングされたテストでうまくいった。あなたの環境でテストできますか? – tdelaney