一. 课程安排
- 课程内容
- 多任务基本介绍
- 主线程和子线程的执行关系
- 查看线程数量
- 验证子线程的执行和创建
- 线程间的通信
二. 课堂笔记
1. 多任务基本介绍
有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的
1.1 程序中模拟多任务
import timedef sing():for i in range(3):print("正在唱歌...%d"%i)time.sleep(1)def dance():for i in range(3):print("正在跳舞...%d"%i)time.sleep(1)if __name__ == '__main__':sing()dance()
2. 主线程和子线程的执行关系
- 主线程会等待子线程结束之后在结束
- join() 等待子线程结束之后,主线程继续执行
- setDaemon() 守护线程,不会等待子线程结束
import threadingimport timedef demo():# 子线程print("hello girls")time.sleep(1)if __name__ == "__main__":for i in range(5):t = threading.Thread(target=demo)t.start()
3. 查看线程数量
threading.enumerate() 查看当前线程的数量
4. 验证子线程的执行与创建
当调用Thread的时候,不会创建线程。
当调用Thread创建出来的实例对象的start方法的时候,才会创建线程以及开始运行这个线程。
继承Thread类创建线程
import threadingimport timeclass A(threading.Thread):def __init__(self,name):super().__init__(name=name)def run(self):for i in range(5):print(i)if __name__ == "__main__":t = A('test_name')t.start()
5. 线程间的通信(多线程共享全局变量)
在一个函数中,对全局变量进行修改的时候,是否要加global要看是否对全局变量的指向进行了修改,如果修改了指向,那么必须使用global,仅仅是修改了指向的空间中的数据,此时不用必须使用global
线程是共享全局变量
5.1 多线程参数-args
threading.Thread(target=test, args=(num,))
