1.理解什么是线程

线程是进程中执行代码的一个分支,每个线程想要工作执行代码需要cpu进行调度,也就是说线程是cpu调度的基本单位,进程是操作系统分配资源的基本单位。
进程是操作系统分配资源的单位,线程是调度的基本单位,线程之间共享进程资源

2.实现多线程 threading模块

线程对象:threading.Thread

threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

1.group:应该设为None,即不用设置,使用默认值就好,因为这个参数是为了以后实现ThreadGroup类而保留的。
2.target:在run方法中调用的可调用对象,即需要开启线程的可调用对象,比如函数或方法。
3.name:线程名称,默认为“Thread-N”形式的名称,N为较小的十进制数。
4.args:在参数target中传入的可调用对象的参数元组,默认为空元组()。
5.kwargs:在参数target中传入的可调用对象的关键字参数字典,默认为空字典{}。
6.daemon:默认为None,即继承当前调用者线程(即开启线程的线程,一般就是主线程)的守护模式属性,如果不为None,则无论该线程是否为守护模式,都会被设置为“守护模式

实例展示

import threading,time


def fun1(x):
    for i in range(x):
        print('帅锅在学习线程')
    time.sleep(2)
    print('完成了')

def fun2(y):
    for i in range(y):
        print('美女在学习线程')
    time.sleep(2)
    print('学习的不错')

#2.创建子线程:thread类
if __name__ == '__main__':
    t1=threading.Thread(target=fun1,args=(6,))
    t2=threading.Thread(target=fun2,args=(5,))


# 3. 守护线程 setDaemon()  语法:子线程名.setDaemon()
# 主线程执行完,子线程也跟着结束,默认False,要True
    t1.setDaemon(True)
    t2.setDaemon(True)

# 4. 开启子线程  start()
    t1.start()
    t2.start()
# 5.阻塞线程
    t1.join()
    t2.join()
# 6.获得线程名
    print(t1.getName())
    print(t2.getName())
    
    print('大家学习的不错')

output:

帅锅在学习线程
帅锅在学习线程
帅锅在学习线程
帅锅在学习线程
帅锅在学习线程
美女在学习线程帅锅在学习线程

美女在学习线程
美女在学习线程
美女在学习线程
美女在学习线程
完成了
学习的不错
Thread-1
Thread-2
大家学习的不错

线程的运行时无序的,线程之前会互相争抢资源,这样做主要是为了提高运行的效率