您好,登錄后才能下訂單哦!
對于python線程相關的函數本文不再做詳細講解,如果想學習線程threading內容請參考:python 線程創建和參數傳遞???
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com ? @File:python_threading.py @Time:2019/12/21 21:25 ? @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ ? import threading ? ? def study_info(*args,**kwargs): ????print(args,kwargs) ? def main(): ? ????# 信息列表 ????list_info = [{"name":"python 基礎","progress":"10%"}, ???????????????? {"name": "python 面向對象", "progress": "20%"}, ???????????????? {"name": "python 爬蟲", "progress": "30%"}, ???????????????? {"name": "python pyqt5", "progress": "40%"}, ???????????????? {"name": "python 數據結構", "progress": "50%"},] ? ????# 創建線程 ????for i in range(5): ????????p = threading.Thread(target=study_info,args=(i,),kwargs=list_info[i]) ????????# 啟動線程 ????????p.start() ? ? if __name__ == "__main__": ????main() |
輸出結果:
1 2 3 4 5 | (0,) {'name': 'python 基礎', 'progress': '10%'} (1,) {'name': 'python 面向對象', 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數據結構', 'progress': '50%'} |
?
?
對于python進程相關的函數本文不再做詳細講解,如果想學習進程Process內容請參考:python 進程Process
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from multiprocessing import Process ? ? def study_info(*args,**kwargs): ????print(args,kwargs) ? def main(): ? ????# 信息列表 ????list_info = [{"name":"python 基礎","progress":"10%"}, ???????????????? {"name": "python 面向對象", "progress": "20%"}, ???????????????? {"name": "python 爬蟲", "progress": "30%"}, ???????????????? {"name": "python pyqt5", "progress": "40%"}, ???????????????? {"name": "python 數據結構", "progress": "50%"},] ? ????# 創建進程 ????for i in range(5): ????????p = Process(target=study_info,args=(i,),kwargs=list_info[i]) ????????# 啟動進程 ????????p.start() ? if __name__ == "__main__": ????main() |
輸出結果:
1 2 3 4 5 | (0,) {'name': 'python 基礎', 'progress': '10%'} (1,) {'name': 'python 面向對象', 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數據結構', 'progress': '50%'} |
?
?
1.一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程(線程是計算機的最小單位);
2.資源分配給進程,同一進程的所有線程共享該進程的所有資源,進程與進程之間資源相互獨立,互不影響(類似深拷貝);
3.多進程模式最大的優點就是穩定性高,因為一個子進程崩潰了,不會影響主進程和其他子進程,多進程模式的缺點是在Windows下創建進程開銷巨大。另外,操作系統能同時運行的進程數也是有限的,在內存和CPU的限制下,如果有幾千個進程同時運行,操作系統連調度都會成問題(進程的創建比線程的創建更加占用計算機資源);
4.多線程模式致命的缺點就是任何一個線程掛掉都可能直接造成整個進程崩潰,因為所有線程共享進程的內存;
5.由于GIL鎖的緣故,python 中線程實際上是并發運行(即便有多個cpu,線程會在其中一個cpu來回切換,只占用一個cpu資源),而進程才是真正的并行(同時執行多個任務,占用多個cpu資源),下面關于并行和并發做一個簡單的了解;
?
并行是指兩個或者多個事件在同一時刻發生,python中的進程屬于并行,能充分利用計算機資源,效率最高,同時執行多個任務,占用多個cpu資源;
并發是指兩個或多個事件在同一時間間隔發生,python中的線程屬于并發,不管計算機有多少個CPU,不管你開了多少個線程,同一時間多個任務會在其中一個CPU來回切換,只占用一個CPU,效率并不高;
關于并行和并發我們留到后面GIL鎖在詳細講解;
?
?
1.python 進程Process
2.python 線程threading
3.python列表推導式
4.python字典推導式
?
轉載請注明:猿說Python???python 線程threading與進程Process區別
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。