我编写了Python代码,让多个线程使用队列中的消息。线程应该一直运行,直到收到sigterm信号为止。因此,我正在使用信号处理程序将全局标志设置为True
,这将使线程退出其循环。
exit_flag = False
def sleep_ten():
while True:
print('Begin Sleeping {}'.format(threading.currentThread))
time.sleep(10)
print('End Sleeping {}'.format(threading.currentThread))
if exit_flag:
break
print('Thread exits {}'.format(threading.currentThread))
def sigterm_handler(sig, frame):
print('Term signal received')
global exit_flag
exit_flag = True
sys.exit()
if __name__ == '__main__':
for i in range(2):
t = threading.Thread(target=sleep_ten, name='worker-%s' % i)
t.start()
while True:
signal.signal(signal.SIGTERM, sigterm_handler)
signal.signal(signal.SIGINT, sigterm_handler)
print('Waiting')
time.sleep(5)
根据类似帖子Why is signal.SIGTERM not dealt with properly in my main thread?的回答,信号处理程序中的sys.eixt()
是退出主线程的必备条件。
当我运行代码并使用命令kill -9 [pid]
杀死进程时,主线程确实被杀死。子线程也是如此。目的是在发出终止信号后不立即终止线程。
我尝试setDaemon
是。它没有帮助