日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python中线程的使用

發(fā)布時間:2024/8/26 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python中线程的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

并發(fā):多個任務(wù)同一時間段進(jìn)行

并行:多個任務(wù)同一時刻進(jìn)行

線程的實(shí)現(xiàn)

線程模塊

Python通過兩個標(biāo)準(zhǔn)庫_thread 和threading,提供對線程的支持 , threading對_thread進(jìn)行了封裝

因此在實(shí)際的使用中我們一般都是使用threading

threading模塊中提供了Thread , Lock , RLock , Condition等組件

Thread類

        常用參數(shù)

target   表示調(diào)用對象,即子線程要執(zhí)行的任務(wù)

name   子線程的名稱

args    傳入target函數(shù)中的位置參數(shù),是一個元組,參數(shù)后必須加逗號

        常用實(shí)例方法

Thread.run (self)        線程啟動時運(yùn)行的方法,由該方法調(diào)用target參數(shù)所指定的函數(shù)

Thread.start (self)       啟動進(jìn)程,start方法就是去幫你調(diào)用run方法

Thread.terminate (self)     強(qiáng)制終止線程

Thread.join (self, timeout=None)   阻塞調(diào)用,主線程進(jìn)行等待

Thread.setDaemon (self,daemonic) 將子線程設(shè)置為守護(hù)線程

Thread.getName(self,name)  獲取線程名稱

Thread.setName (self,name )  設(shè)置線程名稱

創(chuàng)建線程

實(shí)例Thread類

繼承Thread類

Join & setDaemon

主線程 : 當(dāng)一個程序啟動時 , 就有一個線程開始運(yùn)行 , 該線程通常叫做程序的主線程

子線程 : 因?yàn)槌绦蚴情_始時就執(zhí)行的 , 如果你需要再創(chuàng)建線程 , 那么創(chuàng)建的線程就是這個主線程的子線程

主線程的重要性體現(xiàn)在兩方面 :

1. 是產(chǎn)生其他子線程的線程

2. 通常它必須最后完成執(zhí)行比如執(zhí)行各種關(guān)閉操作

join : 阻塞調(diào)用程序 , 直到調(diào)用join () 方法的線程執(zhí)行結(jié)束, 才會繼續(xù)往下執(zhí)行

setDaemon() 與 join() 基本上是相對的 , join會等子線程執(zhí)行完畢 ; 而setDaemon則不會等,主線程結(jié)束,則全部結(jié)束

線程通信

在多線程中 , 所有變量對于所有線程都是共享的

因此 , 線程之間共享數(shù)據(jù)最大的危險在于多個線程同時修改一個變量 , 那就亂套了

所以我們需要互斥鎖 , 來鎖住數(shù)據(jù)

線程間全局變量的共享

因?yàn)榫€程屬于同一個進(jìn)程,因此它們之間共享內(nèi)存區(qū)域,所以全局變量是公共的

共享內(nèi)存間存在競爭問題

在這里進(jìn)行原子操作(取值、運(yùn)算、賦值)的時候切換到了其它線程,一個線程還沒賦值,另外的線程就已經(jīng)給它賦值了,然后又切回來繼續(xù)賦值

使用鎖來控制共享資源的訪問

加鎖:Lock對象.acquire()

解鎖:Lock對象.release()

隊列的基本概念

一個入口,一個出口,先入先出(FIFO)

線程安全隊列、操作一覽

入隊: put(item)

出隊: get()

測試空: empty()

測試滿: full()

隊列長度: qsize()

任務(wù)結(jié)束: task_done()

等待完成: join()

線程池

池的概念

主線程:相當(dāng)于生產(chǎn)者,只管向線程池提交任務(wù),并不關(guān)心線程池是如何執(zhí)行任務(wù)的,因此,也不關(guān)心是哪一個線程執(zhí)行的這個任務(wù)

線程池:相當(dāng)于消費(fèi)者,負(fù)責(zé)接收任務(wù),并將任務(wù)分配到一個空閑的線程中去執(zhí)行

線程池的簡單實(shí)現(xiàn)

python內(nèi)置線程池

池的其他操作

操作一: close - 關(guān)閉提交通道,不允許再提交任務(wù)

操作二: terminate - 中止進(jìn)程池,中止所有任務(wù)

總結(jié)

以上是生活随笔為你收集整理的Python中线程的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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