本文主要介紹python 多線(xiàn)程(python多線(xiàn)程示例),下面一起看看python 多線(xiàn)程(python多線(xiàn)程示例)相關(guān)資訊。
目錄1。什么是線(xiàn)程?二、啟動(dòng)線(xiàn)程的兩種。模式12。模式二。線(xiàn)程對(duì)象的jion方法4。補(bǔ)充小案5。守護(hù)線(xiàn)程6。線(xiàn)程互斥7。gtl-全球口譯員8。驗(yàn)證多線(xiàn)程和多線(xiàn)程應(yīng)用場(chǎng)景總結(jié):1。什么是線(xiàn)程?螺紋,顧名思義,就是流水線(xiàn)作業(yè)的過(guò)程。一條裝配線(xiàn)必須屬于一個(gè)車(chē)間,車(chē)間的工作過(guò)程就是一個(gè)過(guò)程。車(chē)間負(fù)責(zé)整合資源,是一個(gè)資源單元,一個(gè)車(chē)間至少有一條流水線(xiàn)。所以進(jìn)程只是用來(lái)把資源聚集在一起的(進(jìn)程只是一個(gè)資源單元,或者資源的集合),線(xiàn)程是cpu上的執(zhí)行單元。
總結(jié)流程和線(xiàn)程的區(qū)別:
?123456789101112131415 進(jìn)程:資源單元線(xiàn)程:執(zhí)行單元線(xiàn)程是真正做工作的人,工作中需要的資源由線(xiàn)程所在的進(jìn)程提供。每個(gè)進(jìn)程必須自帶線(xiàn)程,每個(gè)進(jìn)程中可以創(chuàng)建多個(gè)線(xiàn)程。打開(kāi)一個(gè)進(jìn)程:申請(qǐng)空間復(fù)制代碼消耗資源。打開(kāi)一個(gè)線(xiàn)程:在同一個(gè)進(jìn)程中創(chuàng)建多個(gè)線(xiàn)程是不必要的。資源消耗相對(duì)較小的多線(xiàn)程(即多個(gè)控制線(xiàn)程)的概念是,一個(gè)進(jìn)程中有多個(gè)控制線(xiàn)程,多個(gè)控制線(xiàn)程共享進(jìn)程的地址空間,相當(dāng)于一個(gè)車(chē)間里有多個(gè)流水線(xiàn),都共享一個(gè)車(chē)間的資源。
二、啟動(dòng)線(xiàn)程的兩種。方法一?1234567891011213從線(xiàn)程導(dǎo)入線(xiàn)程導(dǎo)入時(shí)間#方法1 d:打印( %s正在運(yùn)行 % nam: d:#重寫(xiě)別人 的方法和唐 不知道什么 在其他人身上。;的方法。調(diào)用父類(lèi) s方法sup:打印( %s正在運(yùn)行 % s: t = mythr:打印( %s正在運(yùn)行 % nam: t = thr:全局mon: t = thr:優(yōu)先級(jí)nt( ;child pideco 0-@ . com ;,os。g: t = thread(target = task,args =)t . startprint( ;主pid : ;,os.g: 13444,pid: 13444 ; 。
?1234567891011121314#這是一個(gè)來(lái)自線(xiàn)程導(dǎo)入thread,current _ thread,active _ countimportos,tim: print( ;兒子 ,curr: t = thread(target = task,args = (1,))t1 = thread (target = task,args = (1,))t . startt1 . startt . join# print( ;主 ,current_thread。name)# get thread name print(active _ count)# count當(dāng)前活動(dòng)進(jìn)程的數(shù)量 運(yùn)行結(jié)果:子線(xiàn)程-1子線(xiàn)程-21。; # 。
5.守護(hù)線(xiàn)程和守護(hù)進(jìn)程的概念是相似的。其實(shí)大家都能注意到,進(jìn)程和線(xiàn)程之間有很多知識(shí)點(diǎn),就是用法一樣,互相理解也差不多。
1.守護(hù)線(xiàn)程將隨著主線(xiàn)程的結(jié)束而結(jié)束。
2.主線(xiàn)程在運(yùn)行后不會(huì)立即結(jié)束,而是等待所有其他非守護(hù)線(xiàn)程結(jié)束。
3,因?yàn)橹骶€(xiàn)程的結(jié)束意味著進(jìn)程的結(jié)束。
?1234567891011從線(xiàn)程導(dǎo)入線(xiàn)程導(dǎo)入tim:打印( %s正在運(yùn)行 % nam: t = thr: print( ;1234 )time.sleep (1)打印( end 1234 ).def func:打印;5678 )tim: t1 = thread(target = foo,args = ) t2 = thread (target = func,args = ) t1。daemon = true # t1被設(shè)置為守護(hù)線(xiàn)程。t2是非守護(hù)線(xiàn)程t1 . startt2 . startprint( ;主要的... ) 運(yùn)行結(jié)果:12345678主...end1234end5678 因?yàn)橹骶€(xiàn)程將等待非守護(hù)線(xiàn)程完成運(yùn)行,所以所有主線(xiàn)程都將等待t2(非守護(hù)線(xiàn)程)。
六、線(xiàn)程互斥鎖當(dāng)多個(gè)線(xiàn)程操作同一數(shù)據(jù)時(shí),會(huì)出現(xiàn)數(shù)據(jù)混淆的問(wèn)題。
針對(duì)以上問(wèn)題,解決方法是加鎖處理。
?1234567891011121314151617181920 from threading導(dǎo)入線(xiàn)程,lock import time money = 100 mutex = lockd:全局money mutex . acquir: t _ list =[]for ii in rang: t = thr:為t追加(t)t . joinprint(money)#運(yùn)行結(jié)果:0#多人操作同一個(gè)數(shù)據(jù),數(shù)據(jù)是無(wú)序的,所以被鎖定。
七、gtl-全局解釋器我相信所有學(xué)python的朋友都知道python解釋器其實(shí)有多個(gè)版本。
cpython jpython pypython,但是常用的cpython解釋器。
gil是cpython解釋器中的互斥鎖,用于防止同一進(jìn)程中的多個(gè)線(xiàn)程同時(shí)執(zhí)行。
注意,同一個(gè)進(jìn)程中的多個(gè)線(xiàn)程不能利用多核!?。?!
想必大家都有很多疑惑 的頭腦:是pyhon s多線(xiàn)程沒(méi)用????
因?yàn)閏python中的內(nèi)存管理不是線(xiàn)程安全的。多線(xiàn)程不是沒(méi)用的。當(dāng)遇到多io操作時(shí),多核的優(yōu)勢(shì)就體現(xiàn)不出來(lái)了。多進(jìn)程和多線(xiàn)程的效率在這種情況下差別不大。這時(shí)候多進(jìn)程相對(duì)浪費(fèi)資源,多線(xiàn)程更節(jié)省資源。
ps:內(nèi)存管理是垃圾收集機(jī)制;
1.引用計(jì)數(shù)
2.標(biāo)記移除
3.分區(qū)和回收
?123456# gtl-環(huán)球口譯#要點(diǎn):1 .gil不是python的一個(gè)特性,而是cpython解釋器# 2的一個(gè)特性。gil確保解釋器級(jí)數(shù)據(jù)# 3的安全性。gil會(huì)導(dǎo)致同一個(gè)進(jìn)程中的多個(gè)線(xiàn)程無(wú)法同時(shí)運(yùn)行(即無(wú)法利用多核)# 4。不同的數(shù)據(jù)需要不同的鎖# 5。解釋語(yǔ)言的常見(jiàn)問(wèn)題。
八、驗(yàn)證多線(xiàn)程和多線(xiàn)程應(yīng)用場(chǎng)景?1234567891011121314151617181920 #計(jì)算密集型(cpu一直在工作,沒(méi)有io)(更適合多進(jìn)程)從多處理導(dǎo)入進(jìn)程從線(xiàn)程導(dǎo)入線(xiàn)程導(dǎo)入os,時(shí)間#多進(jìn)程情況d: r: r: l =[]print(os。cpu _ count ) #獲取當(dāng)前計(jì)算機(jī)的cpu核心號(hào)start _ tim:#我的電腦是8核p = proc: p . joinprint(tim: r: r: l =[]print(os。cpu _ count ) #獲取當(dāng)前計(jì)算機(jī)的cpu核心號(hào)start _ tim:#我的電腦是8核t = thr: p . joinprint(tim: tim: l =[]start _ tim: t = thr: p . joinprint(tim: tim: l =[]start _ tim: p = process(target = work,args=) # t=thread(target=work,args =)# t . start# l . append(t)p . startl . append(p)for echo 0-@中ptime -start _ time) #運(yùn)行結(jié)果:5 #
總結(jié):多線(xiàn)程和多處理各有優(yōu)勢(shì)。
而在后期的項(xiàng)目中,通常可以在多個(gè)進(jìn)程下設(shè)置多個(gè)線(xiàn)程。
這樣就可以利用多核,節(jié)約資源。
那個(gè) 本文到此為止,希望能幫到你,也希望你能多關(guān)注劇本之家更多內(nèi)容!
你可能會(huì)對(duì):這篇文章感興趣你知道python多線(xiàn)程中的定時(shí)器嗎?python多線(xiàn)程可以這樣解釋。python多線(xiàn)程的詳細(xì)描述顯示了對(duì)python多線(xiàn)程基礎(chǔ)的深刻理解。python多線(xiàn)程方法的詳細(xì)描述:
線(xiàn)程進(jìn)程
了解更多python 多線(xiàn)程(python多線(xiàn)程示例)相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。