尽管不太理解您的问题,但由于缺乏aws相关问题的背景。正如您所提到的,使用上下文来实现这一点是可行的。
import threading
import time
class Sleeper(threading.Thread):
def __init__(self, sleep=5.0):
threading.Thread.__init__(self, name='Sleeper')
self.stop_event = threading.Event()
self.sleep = sleep
def run(self):
print('Thread {thread} started'.format(thread=threading.current_thread()))
while self.sleep > 0 and not self.stop_event.is_set():
time.sleep(1.0)
self.sleep -= 1
print('Thread {thread} ended'.format(thread=threading.current_thread()))
def stop(self):
self.stop_event.set()
def __enter__(self):
self.start()
return self
def __exit__(self, *args, **kwargs):
self.stop()
print('Force set Thread Sleeper stop_event')
with Sleeper(sleep=2.0) as sleeper:
time.sleep(5)
print('Main Thread ends')
您可以测试以下两种情况:1。主要睡眠时间多,2。睡眠线程有一个更大的睡眠参数,它们将得到两个结果;
如果您仍然希望与main的Sleeper线程交互,那么您的代码应该如下所示:
with Sleeper(sleep=2.0) as sleeper:
cnt = 15
while cnt > 0 and sleeper.is_alive():
print(cnt)
cnt -= 1
time.sleep(1)
你可以看到主屏幕上只打印了几个数字,因为睡眠者已经死了,不再活着了。