您好,登錄后才能下訂單哦!
Python是一種跨平臺的計算機程序設計語言。 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用于獨立的、大型項目的開發。
進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
線程(英語:threading)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。在Unix System V及SunOS中也被稱為輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱為線程。
對于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%'} |
2.資源分配給進程,同一進程的所有線程共享該進程的所有資源,進程與進程之間資源相互獨立,互不影響(類似深拷貝);
3.多進程模式最大的優點就是穩定性高,因為一個子進程崩潰了,不會影響主進程和其他子進程,多進程模式的缺點是在Windows下創建進程開銷巨大。另外,操作系統能同時運行的進程數也是有限的,在內存和CPU的限制下,如果有幾千個進程同時運行,操作系統連調度都會成問題(進程的創建比線程的創建更加占用計算機資源);
4.多線程模式致命的缺點就是任何一個線程掛掉都可能直接造成整個進程崩潰,因為所有線程共享進程的內存;
5.由于GIL鎖的緣故,python 中線程實際上是并發運行(即便有多個cpu,線程會在其中一個cpu來回切換,只占用一個cpu資源),而進程才是真正的并行(同時執行多個任務,占用多個cpu資源),下面關于并行和并發做一個簡單的了解;
并行是指兩個或者多個事件在同一時刻發生,python中的進程屬于并行,能充分利用計算機資源,效率最高,同時執行多個任務,占用多個cpu資源;
并發是指兩個或多個事件在同一時間間隔發生,python中的線程屬于并發,不管計算機有多少個CPU,不管你開了多少個線程,同一時間多個任務會在其中一個CPU來回切換,只占用一個CPU,效率并不高;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。