0.大纲线程的介绍多线程完成多任务多线程步骤、无参线程、有参线程线程的注意点执行顺序、共享全局变量、数据安全互斥锁的使用api使用步骤、死锁进程与线程随笔1. 线程创建步骤步骤说明第一步导包import threading第二步通过线程类创建线程对象线程名threading.Thread(target函数名)第三步启动线程执行任务线程名.start()图示和代码实现无参函数和带参函数 案例演示多线程 -- 不带参数即任务函数不带参数 实现步骤 1.导包 2.创建线程对象 3.启动线程 # 1.导包importthreadingimporttime# 2.定义函数表示 敲代码defcoding():foriinrange(1,11):time.sleep(0.1)print(f正在敲第{i}遍代码...)# 2.定义函数表示 听音乐defmusic():foriinrange(1,11):time.sleep(0.1)print(f正在听第{i}遍音乐...)# 3.测试if__name____main__:# 4.创建两个线程对象分别关联上述两个目标函数p1threading.Thread(targetcoding)p2threading.Thread(targetmusic)# 4.启动线程p1.start()p2.start() 案例演示多线程 -- 带参数即任务函数带参数 实现步骤 1.导包 2.创建线程对象 3.启动线程 # 1.导包importthreadingimporttime# 2.定义函数表示 敲代码defcoding(name,num):foriinrange(1,num1):time.sleep(0.1)print(f{name}正在敲第{i}遍代码...)# 2.定义函数表示 听音乐defmusic(name,count):foriinrange(1,count1):time.sleep(0.1)print(f{name}正在听第{i}遍音乐...)# 3.测试if__name____main__:# 4.创建两个线程对象分别关联上述两个目标函数p1threading.Thread(targetcoding,args(小明,10))p2threading.Thread(targetmusic,kwargs{count:20,name:小王})# 4.启动线程p1.start()p2.start()2. 线程注意点① 线程之间的执行是无序的线程执行具有随机性原因是CPU在做着高效的切换随机性② 主线程会等待所有的子线程执行结束再结束可以通过设置守护线程实现。守护主线程即主线程退出子线程销毁不再执行实现threading.Thread(target函数名, daemon True)守护线程③同一进程的线程间 数据共享数据共享④ 多线程操作共享数据可能会出现安全问题可以用 互斥锁解决。代码示例 案例演示多线程特点 -- 随机性 # 导包importthreadingimporttime# 1.定义线程的目标函数defprint_info():# 1.1 休眠time.sleep(0.2)# 1.2 获取当前线程对象current_threadthreading.current_thread()# 1.3 打印线程名称print(current_thread.name)# 2.测试if__name____main__:# 2.1 创建10个线程观察执行顺序foriinrange(10):tthreading.Thread(targetprint_info)t.start() 案例演示多线程特点 -- 守护线程 # 导包importthreading,time# 1.定义线程的目标函数defwork():foriinrange(10):time.sleep(0.2)print(工作中....)# 2.测试if__name____main__:# 2.1 创建子线程# 方式一创建时添加属性daemonTrue# tthreading.Thread(targetwork, daemonTrue)# 方式二创建完之后设置属性t.daemonTruetthreading.Thread(targetwork)t.daemonTrue# 2.2 启动线程t.start()# 2.3 设置主线程休眠时间time.sleep(1) 案例演示多线程特点 -- 数据共享 #需求:定义全局变量my_list[]定义两个目标函数分别实现添加、查看数据。# 最后创建两个线程分别执行对应的任务观察结果。# 导包importthreading,time# 1.定义全局变量my_list[]# 2.定义线程的目标函数1添加数据defwrite_data():foriinrange(1,4):my_list.append(i)print(添加数据,i)print(fwrite_data:{my_list})# 2.定义线程的目标函数2查看数据defread_data():time.sleep(2)print(fread_data:{my_list})# 3.测试if__name____main__:# 3.1 创建线程并启动threading.Thread(targetwrite_data).start()threading.Thread(targetread_data).start()# 运行结果# 添加数据 1# 添加数据 2# 添加数据 3# write_data:[1, 2, 3]# read_data:[1, 2, 3]