は、このthreading.Thread
クラスを考えてみましょう:コンテキストマネージャでスレッドを使用するには?
class Sleeper(threading.Thread):
def __init__(self, sleep=5.0):
threading.Thread.__init__(self)
self.event = threading.Event()
self.sleep = sleep
def run(self):
while self.sleep > 0 and not self.event.is_set():
self.event.wait(1.0)
self.sleep -= 1
def stop(self):
self.event.set()
それは時間と終了の一定量のために眠るか、その量に達する前に停止しています。
私はそれを使用する:
sleeper = Sleeper()
try:
sleeper.start()
# do stuffs here
except:
# handle possible exceptions here
finally:
sleeper.stop()
そして、私はむしろ、コンテキストマネージャのようにそれを使用します。
with Sleeper():
# do stuffs here
とwith
ブロックを終了するときに、スレッドが停止しています。
私は__enter__
と__exit__
メソッドを追加しようとしているし、動作しているようですが、私はこれが移動するための方法であるか分からない:
def __enter__(self):
self.start()
return self
と
def __exit__(self, type, value, traceback):
self.stop()
しかし、私は本当によ私がここで何をしているのか分からない。それはどのように正しく行われるべきですか?
あなたの質問は正確ですか?あなたは何をしようとしているのかの解決策を持っているようです。 –
私の解決策は私が試しているコードです。問題はこれがどうやって正しく行われるべきかということです。 – Bastian
このSleeperクラスのポイントは何ですか?あなたは何のために寝ていますか、なぜそれを行うには別のスレッドが必要ですか? –