日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中线程和进程_python中线程和进程的简单了解

發(fā)布時間:2023/12/4 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中线程和进程_python中线程和进程的简单了解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、操作系統(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。