threading的daemon和non-daemon

看python主线程是如何等待

import timeimport threadingdef foo(n): for i in range(n): print(i) time.sleep(1)t1 = threading.Thread(target=foo, args=(10, ), daemon=True) # 尝试替换这里的10和下面20的顺序t1.start()t2 = threading.Thread(target=foo, args=(20, ), daemon=False)t2.start()time.sleep(2)print('Main Thread Exiting')daemon 应用场景

主线程退出,其他daemon线程的都会被杀死

import timeimport threadingdef bar(): while True: time.sleep(1) print('bar')def foo(): print("t1's daemon = {}".format(threading.current_thread().isDaemon())) t2 = threading.Thread(target=bar) t2.start() print("t2's daemon = {}".format(t2.isDaemon())) t2.join()t1 = threading.Thread(target=foo, daemon=True)t1.start()# t1.join() 如果想工作线程不能结束,取消掉这个注释time.sleep(3)print('Main Thread Exiting')