Preface:
不管是線程(threading)或是進程(multiprocessing)都為一種搶占資源(競爭式)的型式執行程序
資源消耗大,且CPU切換耗時
Introduction:
協程為單線程,因此不存在CPU線程之間的切換,效率高
協成為單線程,不存在GIL鎖,且數據取用相對安全
協程為單線程,併發次數幾近無限次,適合用於高併發處理
Python模塊-進程間的通信(Queue,Pipe)與數據共享(Manager)
Introduction:
進程之間互相獨立,預設為不能共享數據
透過multiprocess模塊中的Pipe及Queue實現不同進程之間的通信
Queue(隊列):
先進來的先出去,後進來的後出去
透過Manager實現進程之間的數據共享
Python模塊-multiprocessing多進程
Preface:
Python中同時間一個進程只能有一個線程通過GIL交給其中一個CPU執行
同時間要完成多任務能透過創建多進程(multiprocessing)交給不同CPU執行
進程:
程序是未運行的EXE檔:其還沒運行之前,無法調度系統的資源(內存、設備如滑鼠鍵盤等)
進程是運行起來的程序檔案:其能調度系統資源,稱為進程
操作系統分配資源的基本單位
Introduction:
multiprocessing是Python中多進程的管理模塊
其使用方法與多線程(threading)模塊類似,只是環境不同而已
創建進程所耗費的資源較創建線程大
Python基礎-異常處理
Introduction:可自訂義當程序出錯時,自動執行其他程序或做其他處理
Example:1234567try: #代碼塊,邏輯 inp = input("請輸入序號") i = int(inp)except Exception as e: #上述代碼塊如出錯,自動執行當前塊的內容 print("發生錯誤: ",e) i = 1print(i)
Python模塊-Queue隊列
Introduction:
queue是python中的標準庫,俗稱隊列,可直接import使用
隊列(queue)為一種數據結構,用於存儲數據(類似列表及字典)
列表及字典不適合用於多線程中使用,在多個線程中,數據是共享的,進行數據交換的時候,不能夠保證數據的安全性和一致性,我們希望多個線程不要執行同一個任務,但使用列表或是字典就容易發生不同線程取到同一組數據或是執行同一個任務的詬病
隊列可以完美解決線程間的數據交換,保證線程間數據的安全性和一致性