import threading
import time
from random import random
deffunc():for i inrange(30):print(f"{i} do something")
time.sleep(random())
t = threading.Thread(target=func)
t.start()
t.join()# cmd下运行并按ctrl+c,发现第一次无法停止(Linux),再按才会停止
kill_thread2
import threading
import time
from random import random
deffunc():for i inrange(30):print(f"{i} do something")
time.sleep(random())print("end...")
t = threading.Thread(target=func)
t.daemon =True
t.start()
t.join()# cmd下运行并按ctrl+c,直接停止(Linux),无法运行到后面的print语句
kill_thread3
import signal
import threading
import time
from random import random
event = threading.Event()defbg_thread():for i inrange(1,30):print(f"{i} of 30 iteration...")
time.sleep(random())if event.is_set():breakprint(f'{i} iterations completed before exiting.')defsignal_handler(signum, frame):
event.set()
signal.signal(signal.SIGINT, signal_handler)
th = threading.Thread(target=bg_thread)
th.start()
th.join()# cmd下运行并按ctrl+c,直接停止(Linux),但是可以运行到后面的print语句,如果涉及到资源释放,这种方式才行