이 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
슬리퍼 클래스의 요점은 무엇입니까? 당신은 무엇을 위해 자고 있으며, 왜 그것을하기 위해 별도의 실이 필요합니까? –