目录
1.线程的概念
由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程
即线程,
进程是资源分配的最小单位,线程是CPU调度的最小单位(程序真正执行的时候调用的是线程).每一个进程中至少有一个线程。
2.进程和线程之间关系
3.使用threading模块创建线程
from threading import Thread
import time
def sing():
for i in range(3):
print('正在唱歌。。。', i)
time.sleep(2)
def dance():
for i in range(3):
print('正在跳舞。。。', i)
time.sleep(2)
def main():
t1 = Thread(target=sing)
t2 = Thread(target=dance)
t1.start()
t2.start()
if __name__ == '__main__':
main()
print('程序结束。。。')
执行顺序:
首先程序运行时,程序从上往下走,遇到main()函数然后开始执行,执行mian()函数的函数体时又创建了两个线程我们称之为子线程,程序运行时的线程我们称之为主线程
然后子线程根据target=xxx 开始执行指定的函数
(等子线程结束后主线程结束,程序结束了)
(1)传递参数 :给函数传递参数,使用线程的关键字 args=()进行传递参数
(2).join()方法 :当前线程执行完后其他线程才会继续执行。
import time
import threading
def sing():
for i in range(3):
print('.....正在唱歌.....', i)
time.sleep(1)
def dance():
for i in range(3):
print('....正在跳舞....', i)
time.sleep(1)
def main():
t1 = threading.Thread(target=sing)
t2 = threading.Thread(target=dance)
t1.start()
# t1.join() # 效果 t1 执行完后,体 和主线程同时执行
t2.start()
t1.join() # 效果 t1 t2 执行完以后,主线程才执行
if __name__ == '__main__':
main()
print('程序结束了。。。')
(3).setDaemon() 方法 :
setDaemon()将当前线程设置成守护线程来守护主线程:
-当主线程结束后,守护线程也就结束,不管是否执行完成。
-应用场景:qq 多个聊天窗口,就是守护线程。
注意:需要在子线程开启的时候设置成守护线程,否则无效。
from threading import Thread
import time
def sing(num):
for i in range(num):
print('正在唱歌。。。', i)
time.sleep(2)
def dance(num):
for i in range(num):
print('正在跳