python中线程和进程_python中线程和进程的简单了解
一、操作系統(tǒng)、應(yīng)用程序
1.硬件:硬盤、cpu、主板、顯卡........
2.裝系統(tǒng)(本身也是一個軟件):
系統(tǒng)就是一個由程序員寫出來的軟件,該軟件用于控制計算機(jī)得硬盤,讓他們之間進(jìn)行互相配合。
3.安裝軟件:各種應(yīng)用程序
二、并發(fā)和并行
并發(fā):偽,由于執(zhí)行速度特別快,人感覺不到停頓
并行:真,創(chuàng)建多個對象同時操作
三、線程、進(jìn)程
1.單進(jìn)程、單線程的應(yīng)用程序
print("asd")
2.到底什么是線程、進(jìn)程
python中沒有這兩個,是python調(diào)用的操作系統(tǒng)的線程和進(jìn)程
3.單進(jìn)程、多線程的應(yīng)用程序
importthreading #兩個進(jìn)程print("start")deffunc(arg):print(arg)
t= threading.Thread(target=func,args=("......",))
t.start()print("end")#start#......#end
一個應(yīng)用程序(軟件),可以有多個進(jìn)程(默認(rèn)只有一個),一個進(jìn)程中可以創(chuàng)建多個線程(默認(rèn)一個)
總結(jié):
1.操作系統(tǒng)幫助開發(fā)者操作硬件
2.程序員寫好代碼在操作系統(tǒng)上運(yùn)行(依賴解釋器)
1.線程的基本使用
importthreadingdeffunc(arg):print(arg)
t= threading.Thread(target=func,args=(11,))
t.start()print(22)#11#22
View Code
2.主線程默認(rèn)等子線程執(zhí)行完畢
importtimedeffunc(arg):
time.sleep(arg)print(arg)
t1= threading.Thread(target=func,args=(2,))
t1.start()
t2= threading.Thread(target=func,args=(4,))
t2.start()print("end")#end#2#4
View Code
3.主線程不再等待子線程,主線程終止所有的子線程也終止
deffunc(arg):
time.sleep(arg)print(arg)
t1= threading.Thread(target=func,args=(2,))
t1.setDaemon(True)
t1.start()
t2= threading.Thread(target=func,args=(4,))
t2.setDaemon(True)
t2.start()print("end")#end
View Code
4.開發(fā)者可以控制主線程等待子線程的(最多等待時間)
deffunc(arg):
time.sleep(0.01)print(arg)print('創(chuàng)建子線程t1')
t1= threading.Thread(target=func,args=(3,))
t1.start()#無參數(shù),讓主線程在這里等著,等到子線程t1執(zhí)行完畢,才可以繼續(xù)往下走。#有參數(shù),讓主線程在這里最多等待n秒,無論是否執(zhí)行完畢,會繼續(xù)往下走。
t1.join(2)print('創(chuàng)建子線程t2')
t2= threading.Thread(target=func,args=(9,))
t2.start()
t2.join(2) #讓主線程在這里等著,等到子線程t2執(zhí)行完畢,才可以繼續(xù)往下走。
print(123)deffunc(arg):
time.sleep(0.01)print(arg)print('創(chuàng)建子線程t1')
t1= threading.Thread(target=func,args=(3,))
t1.start()#無參數(shù),讓主線程在這里等著,等到子線程t1執(zhí)行完畢,才可以繼續(xù)往下走。#有參數(shù),讓主線程在這里最多等待n秒,無論是否執(zhí)行完畢,會繼續(xù)往下走。
t1.join(2)print('創(chuàng)建子線程t2')
t2= threading.Thread(target=func,args=(9,))
t2.start()
t2.join(2) #讓主線程在這里等著,等到子線程t2執(zhí)行完畢,才可以繼續(xù)往下走。
print(123)
View Code
5.線程名稱
deffunc(arg):
t= threading.current_thread() #獲取到執(zhí)行當(dāng)前函數(shù)的線程對象
name =t.getName()print(name,arg)
t1= threading.Thread(target=func,args=(1,))
t1.setName("t1") #為線程創(chuàng)建名稱
t1.start()
t2= threading.Thread(target=func,args=(2,))
t2.setName("t2")
t2.start()print("end")#t1 1#t2 2#end
View Code
6.線程的本質(zhì)
#先打印:11?end?
deffunc(arg):print(arg)
t1= threading.Thread(target=func,args=(11,))
t1.start()#start 是開始運(yùn)行線程嗎?不是#start 告訴cpu,我已經(jīng)準(zhǔn)備就緒,你可以調(diào)度我了。
print("end")
View Code
7.面向?qū)ο蟀姹镜亩嗑€程
importthreadingclassMyThread(threading.Thread):defrun(self):print(11111,self._args,self._kwargs) #********
t1 = MyThread(args=(11,))
t1.start()print("end")#11111 (11,) {}#end
View Code
python多線程情況下:
計算密集型操作:效率低(GIL鎖)
IO操作:效率高
python多進(jìn)程的情況下:
計算密集型:效率高(浪費(fèi)資源)
IO操作:效率高(浪費(fèi)資源)
在使用時:
IO密集型用多線程:文件、輸入、輸出、socket網(wǎng)絡(luò)通信
計算密集型用多進(jìn)程
四、python中線程和進(jìn)程(GIL鎖)
GIL鎖,全局解釋器鎖,用于限制一個進(jìn)程中同一時刻只有一個線程被cpu調(diào)度。
擴(kuò)展:默認(rèn)GIL鎖在執(zhí)行100個cup指令(過期時間)
importsys
v1=sys.getcheckinterval()print(v1)#100
importtimeimportthreading
lock= threading.RLock() #實(shí)例化一個鎖的對象
n = 10
deffunc(i):print("這段代碼不加鎖",i)
lock.acquire()#加鎖次區(qū)域的代碼同一時刻只能有一個線程執(zhí)行
globalnprint("當(dāng)前線程",i,"讀取到的n值",n)
n=i
time.sleep(1)print("當(dāng)前線程",i,"修改n值為",n)
lock.release()#釋放鎖
for i in range(10):
t= threading.Thread(target=func,args=(i,))
t.start()#這段代碼不加鎖 0#當(dāng)前線程 0 讀取到的n值 10#這段代碼不加鎖 1#這段代碼不加鎖 2#這段代碼不加鎖 3#這段代碼不加鎖 4#這段代碼不加鎖 5#這段代碼不加鎖 6#這段代碼不加鎖 7#這段代碼不加鎖 8#這段代碼不加鎖 9#當(dāng)前線程 0 修改n值為 0#當(dāng)前線程 1 讀取到的n值 0#當(dāng)前線程 1 修改n值為 1#當(dāng)前線程 2 讀取到的n值 1#當(dāng)前線程 2 修改n值為 2#當(dāng)前線程 3 讀取到的n值 2#當(dāng)前線程 3 修改n值為 3#當(dāng)前線程 4 讀取到的n值 3#當(dāng)前線程 4 修改n值為 4#當(dāng)前線程 5 讀取到的n值 4#當(dāng)前線程 5 修改n值為 5#當(dāng)前線程 6 讀取到的n值 5#當(dāng)前線程 6 修改n值為 6#當(dāng)前線程 7 讀取到的n值 6#當(dāng)前線程 7 修改n值為 7#當(dāng)前線程 8 讀取到的n值 7#當(dāng)前線程 8 修改n值為 8#當(dāng)前線程 9 讀取到的n值 8#當(dāng)前線程 9 修改n值為 9
View Code
總結(jié)
以上是生活随笔為你收集整理的python中线程和进程_python中线程和进程的简单了解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python string length
- 下一篇: python总结函数图像_PIL使用小结