- 子线程之间执行是无序的
- 获取当前程序活动线程的列表
thread_list = threading.enumerate()
- 扩展:– 获取活动线程的个数
print("1111-------", threading.active_count())
-创建子线程
#name是给子线程重命名,daemon为True是在主线程结束时销毁子线程,销毁子线程需要时间的。args用来接收元组参数,kwargs用来接收字典参数
sing_thread = threading.Thread(target=sing, name = "", daemon = True, args = (), kwagrs = {})
主线程会等待所有的子线程执行完成以后程序再退出
总结: 主进程会等待所有的子进程执行完成以后程序再退出
多线程可以共享全局变量,多进程不可以共享全局变量
join函数作用:
阻塞主进程,专注于执行多线程中的程序。
多线程多join的情况下,依次执行各线程的join方法,前头一个结束了才能执行后面一个。
无参数,则等待到该线程结束,才开始执行下一个线程的join。
参数timeout为线程的阻塞时间,如 timeout=2 就是罩着这个线程2s 以后,就不管他了,继续执行下面的代码。
互斥锁
1.# 互斥锁: 保证同一时刻只有一个线程去执行代码,其它线程没有抢到锁会等待
2.# 提示:加上互斥锁,那个线程抢到锁我们绝对不了因为,线程执行是无序
3.# 注意点: 线程同步和加上互斥锁把多任务瞬间该成单任务,性能会下降