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

歡迎訪問 生活随笔!

生活随笔

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

python

python关闭线程根据id_python之线程相关操作

發(fā)布時(shí)間:2025/4/5 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python关闭线程根据id_python之线程相关操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.線程: 一個(gè)進(jìn)程可以有多個(gè)線程,共享一個(gè)進(jìn)程的資源;

2.進(jìn)程線程的區(qū)別:

進(jìn)程是資源分配的最小單位,線程是程序執(zhí)行的最小單位

3.python中線程模塊threading, 提供的類: Thread, Lock, Rlock, Semaphore, Event, 等等

4.線程的創(chuàng)建方式

#第一種#from threading import Thread#def f1(s):#print('我是%s' % s)#def f2(s):#print('我是%s' % s)# #if __name__ == '__main__':#t = Thread(target=f1, args=(1,))#t1 = Thread(target=f1, args=(2,))#t.start()#t1.start()#print('我是主線程')

#第二種

from threading importThreadclassMyThread(Thread):def __init__(self, name):

super().__init__()

self.name=namedefrun(self):print('%s今天還是不能皮' %self.name)if __name__ == '__main__':

t= MyThread('Jerry')

t.start()print('主線程')

6.查看線程的進(jìn)程id(同進(jìn)程查看方式一樣)

importosfrom threading importThreaddeff1(n):print('1號', os.getpid())print('%s號線程任務(wù)' %n)deff2(n):print('2號', os.getpid())print('%s號線程任務(wù)' %n)if __name__ == '__main__':

t1= Thread(target=f1, args=(1,))

t2= Thread(target=f2, args=(2,))

t1.start()

t2.start()print('主線程', os.getpid())print('主線程')

7. 在進(jìn)程之間數(shù)據(jù)是空間隔離的, 而在線程中是數(shù)據(jù)共享的

importtimefrom threading importThread#通過對全局變量的修改來驗(yàn)證線程之間是數(shù)據(jù)共享的, 共享同一進(jìn)程中的數(shù)據(jù)

num = 100

deff1():

time.sleep(3)globalnum

num= 3

print('子線程的num', num)if __name__ == '__main__':

t= Thread(target=f1)

t.start()

t.join()#等待子線程運(yùn)行結(jié)束才繼續(xù)向下執(zhí)行

print('主線程的num', num)

8.多進(jìn)程和多線程的效率對比

對于io密集型的, 多線程的時(shí)間較快

deff1():

time.sleep(1) #io密集型

if __name__ == '__main__':#查看一下20個(gè)線程執(zhí)行20個(gè)任務(wù)的執(zhí)行時(shí)間

t_s_time =time.time()

t_list=[]for i in range(5):

t= Thread(target=f1,)

t.start()

t_list.append(t)

[tt.join()for tt int_list]

t_e_time=time.time()

t_dif_time= t_e_time -t_s_time#查看一下20個(gè)進(jìn)程執(zhí)行同樣的任務(wù)的執(zhí)行時(shí)間

p_s_time =time.time()

p_list=[]for i in range(5):

p= Process(target=f1,)

p.start()

p_list.append(p)

[pp.join()for pp inp_list]

p_e_time=time.time()

p_dif_time= p_e_time -p_s_timeprint('多線程的執(zhí)行時(shí)間:', t_dif_time)print('多jincheng的執(zhí)行時(shí)間:', p_dif_time)

計(jì)算型:

importtimefrom threading importThreadfrom multiprocessing importProcessdeff1():#計(jì)算型:

n = 10

for i in range(10000000):

n= n +iif __name__ == '__main__':#查看一下20個(gè)線程執(zhí)行20個(gè)任務(wù)的執(zhí)行時(shí)間

t_s_time =time.time()

t_list=[]for i in range(5):

t= Thread(target=f1,)

t.start()

t_list.append(t)

[tt.join()for tt int_list]

t_e_time=time.time()

t_dif_time= t_e_time -t_s_time#查看一下20個(gè)進(jìn)程執(zhí)行同樣的任務(wù)的執(zhí)行時(shí)間

p_s_time =time.time()

p_list=[]for i in range(5):

p= Process(target=f1,)

p.start()

p_list.append(p)

[pp.join()for pp inp_list]

p_e_time=time.time()

p_dif_time= p_e_time -p_s_timeprint('多線程的執(zhí)行時(shí)間:', t_dif_time)print('多jincheng的執(zhí)行時(shí)間:', p_dif_time)

9.鎖,同步,互斥鎖 為了保護(hù)多線成中數(shù)據(jù)的完整性和線程間狀態(tài)的同步.(同進(jìn)程的鎖一樣)

在線程鎖中, 會產(chǎn)生死鎖現(xiàn)象. 同時(shí)搶鎖

importtimefrom threading importThread, Lock, RLockdeff1(locA, locB):#print('xxxx')

#time.sleep(0.1)

locA.acquire()print('f1>>1號搶到了A鎖')

time.sleep(1)

locB.acquire()print('f1>>1號搶到了B鎖')

locB.release()

locA.release()deff2(locA, locB):print('22222')

time.sleep(0.1)

locB.acquire()print('f2>>2號搶到了B鎖')

locA.acquire()

time.sleep(1)print('f2>>2號搶到了A鎖')

locA.release()

locB.release()if __name__ == '__main__':

locA =Lock()

locB=Lock()

t1 = Thread(target=f1, args=(locA, locB))

t2= Thread(target=f2, args=(locA, locB))

t1.start()

t2.start()

遞歸鎖解決了 死鎖現(xiàn)象

importtimefrom threading importThread, Lock, RLockdeff1(locA, locB):print('xxxxx')

time.sleep(0.1)

locA.acquire()print('f1>>>1號搶到了A鎖')

time.sleep(1)

locB.acquire()print('f1>>>2號搶到了B鎖')

locB.release()

locA.release()deff2(locA, locB):print('22222')

time.sleep(0.1)

locB.acquire()print('f2>>>1號搶到了A鎖')

time.sleep(1)

locA.acquire()print('f2>>>2號搶到了B鎖')

locA.release()

locB.release()if __name__ == '__main__':

locA= locB =RLock()

t1= Thread(target=f1, args=(locA, locB))

t2= Thread(target=f2, args=(locB, locA))

t1.start()

t2.start()

10.多線程的程序不結(jié)束 和 多進(jìn)程的程序不結(jié)束的區(qū)別

守護(hù)進(jìn)程:主進(jìn)程代碼執(zhí)行運(yùn)行結(jié)束,守護(hù)進(jìn)程隨之結(jié)束

守護(hù)線程:守護(hù)線程會等待所有非守護(hù)線程運(yùn)行結(jié)束才結(jié)束

importtimefrom threading importThreadfrom multiprocessing importProcess#守護(hù)進(jìn)程:主進(jìn)程代碼執(zhí)行運(yùn)行結(jié)束,守護(hù)進(jìn)程隨之結(jié)束#守護(hù)線程:守護(hù)線程會等待所有非守護(hù)線程運(yùn)行結(jié)束才結(jié)束

deff1():

time.sleep(2)print('一號線程')deff2():

time.sleep(3)print('二號線程')deff3():

time.sleep(2)print('一號進(jìn)程')deff4():

time.sleep(3)print('二號進(jìn)程')if __name__ == '__main__':#t1 = Thread(target=f1,)

#t2 = Thread(target=f2,)

## t1.daemon = True #  等非守護(hù)線程結(jié)束,守護(hù)線程才會結(jié)束 結(jié)果: 主線程結(jié)束 一號線程 二號線程

#t2.daemon = True # 結(jié)果: 主線程結(jié)束 一號線程

#t1.start()

#t2.start()

#print('主線程結(jié)束')

p1 = Process(target=f3,)

p2= Process(target=f4,)#p1.daemon = True # 結(jié)果: 主進(jìn)程 二號線程

p2.daemon= True #結(jié)果: 主進(jìn)程 一號線程

p1.start()

p2.start()print('主進(jìn)程')

11. GIL鎖 : cpython解釋器上的一把互斥鎖, Python解釋器由于設(shè)計(jì)時(shí)有GIL全局鎖,導(dǎo)致了多線程無法利用多核

Python雖然不能利用多線程實(shí)現(xiàn)多核任務(wù),但可以通過多進(jìn)程實(shí)現(xiàn)多核任務(wù)。多個(gè)Python進(jìn)程有各自獨(dú)立的GIL鎖,互不影響。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的python关闭线程根据id_python之线程相关操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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