1. 多任务基本介绍
有很多的场景中的事情是同时进⾏的,⽐如开⻋的时候 ⼿和脚共同来驾驶汽 ⻋,再⽐如唱歌跳舞也是同时进⾏的。
1.1 程序中模拟多任务
import time
def 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 threading
import time
def 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 threading
import time
class 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,仅仅是修改了指向的空间中的数据,此时不⽤必须使⽤globa。
l 线程是共享全局变量
多线程参数-args
threading.Thread(target=test, args=(num,))