本文目錄一覽:
Python多線程總結
在實際處理數據時,因系統內存有限,我們不可能一次把所有數據都導出進行操作,所以需要批量導出依次操作。為了加快運行,我們會採用多線程的方法進行數據處理, 以下為我總結的多線程批量處理數據的模板:
主要分為三大部分:
共分4部分對多線程的內容進行總結。
先為大家介紹線程的相關概念:
在飛車程序中,如果沒有多線程,我們就不能一邊聽歌一邊玩飛車,聽歌與玩 遊戲 不能並行;在使用多線程後,我們就可以在玩 遊戲 的同時聽背景音樂。在這個例子中啟動飛車程序就是一個進程,玩 遊戲 和聽音樂是兩個線程。
Python 提供了 threading 模塊來實現多線程:
因為新建線程系統需要分配資源、終止線程系統需要回收資源,所以如果可以重用線程,則可以減去新建/終止的開銷以提升性能。同時,使用線程池的語法比自己新建線程執行線程更加簡潔。
Python 為我們提供了 ThreadPoolExecutor 來實現線程池,此線程池默認子線程守護。它的適應場景為突發性大量請求或需要大量線程完成任務,但實際任務處理時間較短。
其中 max_workers 為線程池中的線程個數,常用的遍歷方法有 map 和 submit+as_completed 。根據業務場景的不同,若我們需要輸出結果按遍歷順序返回,我們就用 map 方法,若想誰先完成就返回誰,我們就用 submit+as_complete 方法。
我們把一個時間段內只允許一個線程使用的資源稱為臨界資源,對臨界資源的訪問,必須互斥的進行。互斥,也稱間接制約關係。線程互斥指當一個線程訪問某臨界資源時,另一個想要訪問該臨界資源的線程必須等待。當前訪問臨界資源的線程訪問結束,釋放該資源之後,另一個線程才能去訪問臨界資源。鎖的功能就是實現線程互斥。
我把線程互斥比作廁所包間上大號的過程,因為包間里只有一個坑,所以只允許一個人進行大號。當第一個人要上廁所時,會將門上上鎖,這時如果第二個人也想大號,那就必須等第一個人上完,將鎖解開後才能進行,在這期間第二個人就只能在門外等着。這個過程與代碼中使用鎖的原理如出一轍,這裡的坑就是臨界資源。 Python 的 threading 模塊引入了鎖。 threading 模塊提供了 Lock 類,它有如下方法加鎖和釋放鎖:
我們會發現這個程序只會打印“第一道鎖”,而且程序既沒有終止,也沒有繼續運行。這是因為 Lock 鎖在同一線程內第一次加鎖之後還沒有釋放時,就進行了第二次 acquire 請求,導致無法執行 release ,所以鎖永遠無法釋放,這就是死鎖。如果我們使用 RLock 就能正常運行,不會發生死鎖的狀態。
在主線程中定義 Lock 鎖,然後上鎖,再創建一個子 線程t 運行 main 函數釋放鎖,結果正常輸出,說明主線程上的鎖,可由子線程解鎖。
如果把上面的鎖改為 RLock 則報錯。在實際中設計程序時,我們會將每個功能分別封裝成一個函數,每個函數中都可能會有臨界區域,所以就需要用到 RLock 。
一句話總結就是 Lock 不能套娃, RLock 可以套娃; Lock 可以由其他線程中的鎖進行操作, RLock 只能由本線程進行操作。
python需要學習什麼內容?
Python的學習內容還是比較多的,我們將學習的過程劃分為4個階段,每個階段學習對應的內容,具體的學習順序如下:
Python學習順序:
①Python軟件開發基礎
掌握計算機的構成和工作原理
會使用Linux常用工具
熟練使用Docker的基本命令
建立Python開發環境,並使用print輸出
使用Python完成字符串的各種操作
使用Python re模塊進行程序設計
使用Python創建文件、訪問、刪除文件
掌握import 語句、From…import 語句、From…import* 語句、方法的引用、Python中的包
②Python軟件開發進階
能夠使用Python面向對象方法開發軟件
能夠自己建立數據庫,表,並進行基本數據庫操作
掌握非關係數據庫MongoDB的使用,掌握Redis開發
能夠獨立完成TCP/UDP服務端客戶端軟件開發,能夠實現ftp、http服務器,開發郵件軟件
能開發多進程、多線程軟件
③Python全棧式WEB工程師
能夠獨立完成後端軟件開發,深入理解Python開發後端的精髓
能夠獨立完成前端軟件開發,並和後端結合,熟練掌握使用Python進行全站Web開發的技巧
④Python多領域開發
能夠使用Python熟練編寫爬蟲軟件
能夠熟練使用Python庫進行數據分析
招聘網站Python招聘職位數據爬取分析
掌握使用Python開源人工智能框架進行人工智能軟件開發、語音識別、人臉識別
掌握基本設計模式、常用算法
掌握軟件工程、項目管理、項目文檔、軟件測試調優的基本方法
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,中博軟件學院、南京課工場、南京北大青鳥等開設python專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
請點擊輸入圖片描述
python中類的理解與總結?
9. 類
Python 的類機制通過最小的新語法和語義在語言中實現了類。它是 C++ 或者 Modula-3 語言中類機制的混合。就像模塊一樣,Python 的類並沒有在用戶和定義之間設立絕對的屏障,而是依賴於用戶不去“強行闖入定義”的優雅。另一方面,類的大多數重要特性都被完整的保留下來:類繼承機制允許多重繼承,派生類可以覆蓋(override)基類中的任何方法或類,可以使用相同的方法名稱調用基類的方法。對象可以包含任意數量的私有數據。
用 C++ 術語來講,所有的類成員(包括數據成員)都是公有( public )的(其它情況見下文 私有變量),所有的成員函數都是虛( virtual )的。用 Modula-3 的術語來講,在成員方法中沒有簡便的方式引用對象的成員:方法函數在定義時需要以引用的對象做為第一個參數,調用時則會隱式引用對象。像在 Smalltalk 中一個,類也是對象。這就提供了導入和重命名語義。不像 C++ 和 Modula-3 中那樣,大多數帶有特殊語法的內置操作符(算法運算符、下標等)都可以針對類的需要重新定義。
在討論類時,沒有足夠的得到共識的術語,我會偶爾從 Smalltalk 和 C++ 借用一些。我比較喜歡用 Modula-3 的用語,因為比起 C++,Python 的面向對象語法更像它,但是我想很少有讀者聽過這個。
Python 標準庫模塊 – re
正則表達式引擎對正則表達式文本進行編譯生成正則表達式對象,再由正則表達式對象對目標文本進行匹配,後返回匹配結果。
正則表達式中一共包含 2 中字符: 普通字符 、 元字符
匹配單個字符的元字符及其含義:
匹配重複性的元字符及其含義:
匹配位置的元字符及其含義:
分組匹配的元字符及其含義:
表示或運算的元字符:
轉義元字符:
在 Python 中使用正則表達式,我們需要藉助 re 模塊提供的強大 API,下面我們就來學習幾個 re 模塊常用的接口吧~
參數說明: findall(“正則表達式”, “要匹配的字符串”, flags=標誌1|標誌2|…)
返回值:以列表形式返回匹配到的字符串。
下面,我們用 findall 返回 Python 之禪中首尾用到的反義詞:
運行結果:
當正則表達式中含有一個以上分組時, findall 返回的列表由元組構成,元組中包含每個分組匹配到的內容。如果只有一個分組,則返回由該分組匹配到的內容組所構成的列表:
match 函數返回的結果是一個 SRE_Match 對象:
SRE_Match 具有很多的屬性,比如 .string 屬性可以方便我們我獲取在匹配時輸入的字符串:
屬性 .re 可以獲取匹配時使用的編譯後的正則表達式模式:
由於默認使用了 re.UNICODE ,所以我們這裡的 \w 可以匹配中文字符。
屬性 .regs 則以列表的形式返回正則表達式匹配到的內容以及各個分組陪陪到的內容,不過請注意,返回的都是索引的形式:
可以使用序列切片來看一下我們的正則表達式及其中的兩個分組所匹配到的內容:
SRE_Match 對象也提供了非常多好用的方法,比如 groups 可以獲取各個分組匹配到的內容:
group 則可以靈活地獲取正則表達式或對應分組匹配到的內容:
如果使用的正則表達式定義了分組的名稱, group 還可以通過名稱獲取相應分組匹配的內容:
在定義了分組的名稱之後,還可以方便地使用 groupdict 以字典的形式返回所有分組匹配的結果:
最後需要注意的是, match 從字符串的開頭開始匹配,如果開頭不符合要求,則直接返回 None 。
與 match 匹配開頭不同, search 匹配第一個符合規則的字符串,未成功則返回 None 。參數: re.search(pattern, string, flags=0) ;返回值同 match 。
在介紹 match 的使用時,最後一個例子,由於我們在字符串前面添加了 ‘PYTHON’ 導致 match 使用原來的正則表達式無法匹配,返回 None 。此時,使用 search 就可以迎刃而解啦:
運行結果:
小結:
參數: re.split(pattern, string, maxsplit=0, flags=0) , split 功能非常強大,以正則表達式匹配到的標誌來分隔字符串,比如下面這樣一個混亂的字符串,我們要提取其中所有的數字:
下面,我們就來詳細介紹一下 split 的用法。
首先,是以單字符切割:
以分號切割時,共產生了 4 個子字符串,放在列表中返回。
下面,還是以單字符切割,但可以使用正則表達式中的 [] 來指定多種字符:
由於字符串 line 中有連續的 2 個分號,逗號或者空格,因此可以使用 [;\s,]+ 來切割:
最後,上面的字符串在切割時,分隔符都沒有被保留下來,使用括號捕獲分組,即可保留分隔符:
re.sub 提供比字符串的 replace 方法更加強大的功能:對於輸入的字符串 string ,利用正則表達式 pattern 強大的字符串處理功能,實現複雜的字符串替換處理為 repl ,返回被替換後的字符串。
下面的例子中,我們將句子中多餘的空格和數字去掉:
如果想要知道替換過程中,共發生了多少次替換,可以使用 subn :
小結:
上述的案例中,我們每次都需要傳入正則表達式,相應的函數每次在調用時,都需要編譯一次正則表達式。如果上述過程需要多次重複,那麼每次都去耗費時間編譯正則表達式是很不划算的。
re 模塊為我們提供了 compile 函數,用來編譯正則表達式模式,返回編譯好模式。因此,可以把那些常用的正則表達式編譯成正則表達式對象,以提高效率。
格式: re.compile(pattern, flags=0) ,其中 pattern 為編譯時用的表達式字符串, flags 為編譯標誌位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。常用的 flags 有:
註:使用按位或 | 連接多個 flags 。
我們上述介紹的 re 模塊的匹配、分割、替換函數, compile 函數的返回值類提供了相應的方法,使用方式類似,只是不需要傳入正則表達式字符串而已。
由於用法幾乎一致,這裡就不一一舉例啦~
貪婪模式 : * + ? {m,n} ,正則表達式的重複默認總是儘可能多得向後匹配內容。
非貪婪模式 : *? +? ?? {m,n}? ,儘可能少的匹配內容。
python培訓入門教程?怎樣入門呢?
python作為一個編程語言,具有與其他編程語言同等的能力。冠冕堂皇地講,是所有語言都是圖靈等價的。不過python作為一門語言,尤其獨特的優點,簡單易學,內置了很多庫。也很容易擴展。Python培訓課程如何學?
可以選一本通俗易懂的書,找一個好的視頻資料,然後自己裝一個IDE工具開始邊學邊寫。下面我具體來講講:
1.找一本靠譜的書,難度一定要是入門級別,千萬不能太複雜,不要一下子陷進去,會打亂節奏,學東西要循序漸進,不能一口吃個胖子.打個比方,學過java的同學都聽過大名鼎鼎的thinking in java,這邊書很厚很全,若一上來就學,肯定會吃力,時間長了就會失去興趣,因此對初學者來說,一定要找一本通熟易懂的,簡單的書。入門的書非常關鍵。
入門的書很多,但是我個人強烈推薦《A Byte of Python》,這本書我讀了2遍,作者寫作思路非常清晰,對每個知識點講解很到位,不多不少。對初學者來說,力道剛剛好。而且是全英文,對提高自己的英語水平也很有幫助。
網上有人會推薦《笨辦法學Python》,我個人覺得這本書沒有《A Byte of Python》好 。一般有一些編程基本,我建議直接看《A Byte of Python》。這本書的銷量已經破百萬了,而且在豆瓣上點評有8.8,可謂是入門級的神書.電子版大家可以在CSDN 搜一下就有,都是高清的。
2.找一個靠譜的師傅。Python編程是一個十分系統的技術體系,有時候光靠看書和網上的視頻,只能是一知半解,遇到問題,沒有人給你講解其中的原理和流程,那麼對於整個技術點的理解就永遠不會通透。況且,編程不只是知識,還涉及到做具體的項目,在做項目中,如果有人帶,進步才是最神速的。
3.多編寫程序,這似乎是廢話,但是確實是一句實話。學編程一定要親身去編寫,沒有什麼捷徑。一開始哪怕你把書裡面的例子一字不落敲一遍,也好過你只是去看書,而不動手。
而且學python 最好是堅持編,每天抽小半個小時,學一些知識點,不斷堅持.快的話幾個星期基本就能入門了。
原創文章,作者:AY26U,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130536.html