版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
口令:RAPID708第12章
多线程和多进程学习目标了解多线程和多进程的含义和区别。掌握多进程的相关操作。掌握多线程的相关操作。多线程程序只能从上到下,逐行执行代码,多线程让程序拥有分身效果,能同时处理多件事情。多线程是加速程序运算的有效方法,在Python中多线程操作使用“threading”模块。创建线程importthreadingdefthread_job():print('当前线程个数:%s'%threading.active_count())print('当前线程信息:%s'%threading.current_thread())print('所有线程信息:%s'%threading.enumerate())definit():thread=threading.Thread(target=thread_job)#定义线程thread.start() #启动线程if__name__=='__main__':init()多线程多线程操作时可能会遇到线程抢占的情况。importthreadingimporttimedefthread_job():print("T1start\n")time.sleep(0.1) #延时0.1sprint("T1finish\n")added_thread=threading.Thread(target=thread_job,name='T1')added_thread.start()print("alldone\n")多线程线程等待importthreadingimporttimedefthread1_job():print('T1start\n')time.sleep(1)print('T1finish\n')defthread2_job():print('T2start\n')print('T2finish\n')defmain():thread1=threading.Thread(target=thread1_job,name='T1')thread2=threading.Thread(target=thread2_job,name='T2')thread1.start()thread2.start()thread1.join()#等待线程T1执行完成后,才会继续运行
print('alldone\n')if__name__=='__main__':main()多线程线程存储importthreadingimporttimefromqueueimportQueuedefjob(l,q):foriinrange(len(l)):l[i]=l[i]**2q.put(l) #数据存储definit():q=Queue()threads=[]data=[[1,2,3],[4,5,6],[7,7,7],[8,8,8]]foriinrange(4):#创建4个线程t=threading.Thread(target=job,args=(data[i],q))t.start()threads.append(t)forthreadinthreads:thread.join()results=[]for_inrange(4):results.append(q.get()) #获取数据print(results)if__name__=='__main__':init()多线程使用“join()”方法虽然在一定程度上加强了线程管理,但是线程运行效果依旧很混乱。importthreadingdefjob1():globalAforiinrange(10):#全局变量A循环10次,每次循环加1A+=1print('job1',A)defjob2():globalAforiinrange(10):#全局变量A循环10次,每次循环加10A+=10print('job2',A)if__name__=='__main__':lock=threading.Lock()A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()多线程线程同步importthreadingdefjob1():globalA,locklock.acquire() #内存上锁foriinrange(10):A+=1print('job1',A)lock.release() #内存锁打开defjob2():globalA,locklock.acquire()foriinrange(10):A+=10print('job2',A)lock.release()if__name__=='__main__':lock=threading.Lock() #定义Lock()对象A=0t1=threading.Thread(target=job1)t2=threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()多进程多线程是有劣势的,“GIL”(全局解释器锁)让它没能更有效率的处理一些分摊的任务,而现在的电脑大部分配备了多核处理器,多进程可以让电脑更有效率的分配任务给每一个处理器,这种做法有效解决多线程的弊端。importmultiprocessingasmpdefjob():print('job')if__name__=='__main__':p1=mp.Process(target=job)p1.start()p1.join()多进程importmultiprocessingasmpdefjob(q):res=0foriinrange(1000):res+=i+i**2+i**3q.put(res)#将进程运行结果存放到队列中if__name__=='__main__':q=mp.Queue()p1=mp.Process(target=job,args=(q,))#进程1p2=mp.Process(target=job,args=(q,))#进程2p1.start()p2.start()p1.join()p2.join()res1=q.get() #从队列中取出数据res2=q.get()print(res1+res2)进程存储多进程进程池importmultiprocessingasmpdefjob(x):returnx*xdefinit():pool=mp.Pool()res=pool.map(job,range(10))print(res)if__name__=='__main__':init()设置进程池CPU核数definit():pool=mp.Pool(processes=3)#自定义CPU核数量为3res=pool.map(job,range(10))print(res)进程池传单个参数definit():pool=mp.Pool()res=pool.map(job,range(10))print(res)res=pool.apply_async(job,(2,))print(res.get())#获得结果进程池传多个参数definit():pool=mp.Pool()res=pool.map(job,range(10))print(res)res=pool.apply_async(job,(2,))print(res.get())#获得结果
multi_res=[pool.apply_async(job,(i,))foriinrange(10)]#迭代器输入
print([res.get()forresinmulti_res])#迭代输出多进程进程同步importmultiprocessingasmpimporttimedefjob(num1,num2):for_inrange(5):time.sleep(0.1)#延时0.1Snum1.value+=num2#v.value获取共享变量值print(num1.value,end="")definit():num=mp.Value('i',0)#定义共享变量p1=mp.Process(target=job,args=(num,1)) #累加值1p2=mp.Process(target=job,args=(num,3)) #累加值3p1.start()p2.start()p1.join()p2.join()if__name__=='__main__':init()多进程进程锁importmultiprocessingasmpimporttimedefjob(num1,num2,l):l.acquire()#内存锁住for_inrange(5):time.sleep(0.1)num1.value+=num2#获取共享内存print(num1.value)l.release()#内存释放definit():l=mp.Lock(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年黑龙江省双鸭山市饶河县数学三下期中学业水平测试试题(含答案解析)
- 2026年党史知识竞赛考试多选题库90题含答案
- 小学主题班会课件:创新思维激发学习热情
- 小微企业创业补贴申请书
- 高中三年级语文《边城》意境赏析教案
- 益气活血化痰法对慢性阻塞性肺疾病急性加重期痰瘀阻肺证患者的临床研究
- 基于深度学习的苹果检测与成熟度分析算法研究
- 基于任务型教学法的泰国中级汉语综合课《把重要的东西放在我这儿吧》教学设计
- 基于KM-模糊伪度量的模糊粗糙集研究
- 考研中医综合中医基础理论(藏象)模拟试卷3(题后含答案及解析)
- 中国电子级甲醇市场运行态势与发展战略建议研究报告
- 健康科普能力大赛
- 2026事业单位综合能力测试题及答案
- 2026年CCAA注册审核员《管理体系认证基础》试题及答案
- 新疆2026年事业编招聘考试真题及答案解析
- 2026年初级消防监控证试题及答案
- 2026年江苏省苏州市中考道德与法治试卷附答案
- 化粪池拆除专项施工方案
- GB/T 12957-2026用于水泥混合材的工业废渣活性试验方法
- 2026年度全国保密教育线上培训题库(选择+判断)及参考答案
- 低压用电系统漏电保护技术措施培训
评论
0/150
提交评论