玩轉Python多線程生長吧!Python】

      網友投稿 751 2022-05-30

      前言:

      這是我看了這位b站老師做的筆記,聽課完后覺得很簡單,感覺我這筆記還寫得有點啰嗦,線程和進程原理差不多,看了進程就可以跳著看線程了(反正我是這樣的,哈哈)

      一. 多任務介紹

      多任務:同一時間打開多個任務。比如一臺計算機上同時打開百度,和谷歌

      并發 :在一段時間內 交替 去執行多個任務。比如對于單核cpu處理多任務,操作系統輪流讓各個任務交替執行

      并行: 在一段時間內真正的同時一起 執行多個任務。

      二. 進程

      python中可以使用多進程 來實現多任務。

      進程的概念:是資源的最小單位,,它是操作系統進行資源分配和調度運行的基本單位。通俗理解:一個正在運行的程序就是一個進程。例如qq等,都是一個進程

      多進程作用

      進程在python中的創建步驟:

      #1. 導包 import multiprocessing #2. 通過進程類創建進程對象 進程對象=multiprocessing.Process(target=任務名) #3. 啟動進程執行任務 進程對象.start()

      練習:

      import multiprocessing import time #創建兩個任務 def sing(): for i in range(3): print('唱歌...') time.sleep(1.5) def dance(): for i in range(3): print('跳舞..') time.sleep(1.5) if __name__=='__main__':#main是主進程 #使用進程類創0建進程對象 #target指定執行函數名.記住:一定要指定 sing_process=multiprocessing.Process(target=sing) dance_process=multiprocessing.Process(target=dance) #使用進程對象啟動進程執行指定任務 sing_process.start() dance_process.start() '''輸出 唱歌... 跳舞.. 唱歌... 跳舞.. 唱歌... 跳舞.. '''

      練習:將上面代碼3改為num

      import multiprocessing import time #創建兩個任務 def sing(num): for i in range(num): print('唱歌...') time.sleep(1.5) def dance(): for i in range(num): print('跳舞..') time.sleep(1.5) if __name__=='__main__': sing_process=multiprocessing.Process(target=sing,args=(3,))#按照參數順序 dance_process=multiprocessing.Process(target=dance,kwargs={"num":2})#保證參數名一致就行 #使用進程對象啟動進程執行指定任務 sing_process.start() dance_process.start() ''' 跟上述代碼輸出一樣 '''

      作用:當程序進程多時,沒辦法區分主進程和子進程,為了方便管理給每個進程設定編號

      注意:需要導入os包

      獲取當前進程編號:os.getpid

      獲取父進程編號:os.getppid

      import multiprocessing import time import os#導入os #創建兩個任務 def sing(): print('唱歌...') print("當前唱歌進程編號",os.getpid()) print("獲取父進程編號",os.getppid()) time.sleep(1.5) if __name__=='__main__': #使用進程類創0建進程對象 #target指定執行函數名.記住:一定要指定 print("當前主機進程編號",os.getpid()) sing_process=multiprocessing.Process(target=sing) #使用進程對象啟動進程執行指定任務 sing_process.start() '''輸出 當前主機進程編號 7744 唱歌... 當前唱歌進程編號 20328 獲取父進程編號 7744 '''

      聽到守護,是不是想到你那個夜晚對呀發誓要守護她一生一世

      這里的守護可不一樣

      讓我們來看看守護進程是什么:

      一般情況下,主進程會等待子進程執行完后在結束,那么如何設置主進程結束子進程也結束,不再執行代碼呢?

      設置守護主進程方式:子進程對象.daemon=True

      不多說,上代碼

      import multiprocessing import time def work(): for i in range(10): print("工作中。。。") time.sleep(0.2) if __name__=='__main__': #創建子進程 sum_process=multiprocessing.Process(target=work) sum_process.daemon=True#設置守護主進程,主進程退出后子進程直接銷毀,不在執行 sum_process.start() time.sleep(1) print("主進程執行完成") '''輸出 工作中。。。 工作中。。。 工作中。。。 工作中。。。 工作中。。。 主進程執行完成 '''

      你們可以去掉守護進程自己去試一下,后面還會運行子進程

      三. 線程

      在python中還可以使用多線程完成多任務

      為什么使用

      進程是分配資源的最小單位, 一旦創建一個進程就會分配一定的資源,就像跟兩個人聊QQ就需要打開兩個QQ軟件-樣是比較浪費資源的.

      線程是程序執行的最小單位,實際上進程只負責分配資源,而利用這些資源執行程序的是線程,也就說進程是線程的容器,一個進程中最少有一個線程來負責執行程序.同時線程自己不擁有系統資源,只需要一點兒在運行中必不可少的資源,但它可與同屬一一個進程的其它線程共享進程所擁有的全部資源。這就像通過一個QQ軟件(一個進程)打開兩個窗口(兩個線程)跟兩個人聊天一樣,實現多任務的同時也節省了資源.

      總結:

      (1)線程是程序執行的最小單位.

      (2)同屬一個進程的多個線程共享進程所擁有的全部資源.

      導入線程模塊

      import threading

      通過線程類創建線程對象

      線程對象=threading.Thread(target=任務名)

      啟動線程執行任務

      線程對象.start()

      代碼實例

      import threading import time #創建兩個任務 def sing(): for i in range(3): print('唱歌...') time.sleep(1.5) def dance(): for i in range(3): print('跳舞..') time.sleep(1.5) if __name__=='__main__': #使用進程類創0建進程對象 #target指定執行函數名.記住:一定要指定 sing_process=threading.Thread(target=sing) dance_process=threading.Thread(target=dance) #使用進程對象啟動進程執行指定任務 sing_process.start() dance_process.start()

      代碼解析:跟進程不同,唱歌跳舞是同時出現的,遍歷了三次

      主線程會等待所有的子線程執行結束再結束,除非設置子線程守護主線程

      設置守護主線程有兩種方式:

      (1)threading.Thread(target=work, daemon=True)

      (2)線程對象.setDaemon(True)

      差不多跟進程一樣,就不上代碼了

      介紹:多進程執行時無序的,是由cpu調度決定某個線程先執行的

      上代碼

      import threading import time def task(): time.sleep(2) #current_thread():獲取當前線程的線程對象 thread=threading.current_thread() print(thread) if __name__== '__main__': for i in range(5): sub_thread=threading.Thread(target=task) sub_thread.start() '''輸出 '''

      我們可以看到,輸出的是23145,順序是被打亂的,所以多進程是無序的

      四. 進程和線程對比

      1.關系對比

      (1)線程是依附于進程的,沒有進程就沒線程

      (2)一個進程默認提供一條線程,進程可以創建多個線程

      2. 區別對比

      (1)創建進程開銷比線程大

      (2)進程是操作系統資源分配的基本單位,線程是cpu調度的基本單位

      (3)線程需要依附進程才可以運行

      3. 優缺點對比

      (1)線程可以用多核,進程不能

      (2)開銷的大小

      玩轉python多線程【生長吧!Python】

      本人博客:https://blog.csdn.net/weixin_46654114

      本人b站求關注:https://space.bilibili.com/391105864

      轉載說明:跟我說明,務必注明來源,附帶本人博客連接。

      【生長吧!Python】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/278897

      請給我點個贊鼓勵我吧

      Python 任務調度 多線程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Docker數據管理與網絡通信
      下一篇:Hadoop環境搭建測試以及MapReduce實例實現
      相關文章
      亚洲综合一区国产精品| 亚洲毛片基地日韩毛片基地| 亚洲色无码国产精品网站可下载| 67pao强力打造67194在线午夜亚洲| 亚洲高清国产AV拍精品青青草原| 久久久久亚洲精品天堂久久久久久 | 国产精品亚洲综合久久| 亚洲国产中文在线视频| 亚洲国产成人精品久久| 亚洲中文字幕久在线| 亚洲欧洲校园自拍都市| 亚洲国语在线视频手机在线| 亚洲明星合成图综合区在线| 亚洲春色另类小说| 亚洲永久在线观看| 亚洲欧美黑人猛交群| 亚洲av无码偷拍在线观看| 风间由美在线亚洲一区| 另类小说亚洲色图| 亚洲一区二区高清| 国产日产亚洲系列| 亚洲AV综合色一区二区三区| 久久亚洲一区二区| 亚洲精品视频在线播放| 亚洲乱码无限2021芒果| 中文字幕乱码亚洲无线三区 | 亚洲男同gay片| 亚洲AV无码专区在线厂| 亚洲熟妇少妇任你躁在线观看无码| 爱情岛论坛网亚洲品质自拍| 亚洲色成人网站WWW永久| 亚洲AV无码成人精品区天堂| 中文字幕亚洲精品| 亚洲一区二区三区在线网站| 亚洲精华国产精华精华液网站| 国产亚洲精品欧洲在线观看| 亚洲午夜无码AV毛片久久| 国产AV无码专区亚洲AV男同| 亚洲视频一区在线播放| 亚洲AV男人的天堂在线观看| 国产AV无码专区亚洲AV蜜芽|