例子1
#!/usr/bin/python
#-*- coding:utf-8 -*-
import sys
import threading
import time
class TaskThread(threading.Thread):
def __init__(self, cnt):
threading.Thread.__init__(self)
self.cnt = cnt
self.running = True
def run(self):
while self.running:
time.sleep(1)
print("cnt = %d\n" % self.cnt)
self.cnt = self.cnt - 1
if self.cnt <= 0:
break
print('task thread exit!\n')
if __name__ == "__main__":
task = TaskThread(20)
task.start()
main_alive = True
try:
while main_alive:
time.sleep(1)
print('#\n')
except KeyboardInterrupt:
print('Ctrl C To Exit\n')
task.running = False
print('Main Process Exit\n')
log为:
E:\python\work\thread_t1>python thread_test1.py
cnt = 20
#
cnt = 19
#
cnt = 18
#
cnt = 17
#
cnt = 16
#
Ctrl C To Exit
Main Process Exit
cnt = 15
task thread exit!
例子2
#!/usr/bin/python
#-*- coding:utf-8 -*-
import sys
import threading
import time
import signal
gl_running = True
class TaskThread(threading.Thread):
def __init__(self, cnt):
threading.Thread.__init__(self)
self.cnt = cnt
self.running = True
def run(self):
global gl_running
while gl_running:
time.sleep(1)
print("cnt = %d\n" % self.cnt)
self.cnt = self.cnt - 1
if self.cnt <= 0:
break
print('task thread exit!\n')
def handle_exit(signum, frame):
global gl_running
gl_running = False
print('catched interrupt signal!\n')
if __name__ == "__main__":
task = TaskThread(20)
task.start()
signal.signal(signal.SIGINT, handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
while gl_running:
time.sleep(1)
print('Main Process Exit\n')
log为:
E:\python\work\thread_t1>python thread_test1.py
cnt = 20
cnt = 19
cnt = 18
cnt = 17
catched interrupt signal!
Main Process Exit
cnt = 16
task thread exit!
Python线程控制与优雅退出
本文通过两个Python代码示例,深入探讨了如何在Python中使用线程进行任务处理,并重点讲解了如何实现线程的优雅退出。第一个示例展示了如何通过设置线程的运行状态来控制线程的生命周期;第二个示例则介绍了如何利用全局变量和信号处理函数来响应外部中断信号,从而实现在接收到中断信号时线程能够平滑地结束运行。
1713

被折叠的 条评论
为什么被折叠?



