一 : 科普一分鐘
盡管進程間是獨立存在的,不能相互訪問彼此的數據,但是在python中卻存在進程間的通信方法,來幫助我們可以利用多核CPU也能共享數據.
對于多線程其實也是存在一些缺點的,不是任何場景我們都用多線程來完成并發處理任務,因為CPU操作線程,所以線程多了,對于計算機的資源消耗是十分嚴重的,多線程適合IO操作密集的任務,那么怎么辦呢, 協程的出現幫我們解決了這個問題 ,協程是比線程更小的一個單位,但是它的作用卻不容忽視.
二 : 多進程
1.多進程簡單了解 :
進程之間是獨立的,是操作系統自己來維護和管理的,python通過C接口起了一個進程,多進程可以充分的利用多核CPU
2. 多進程的創建 :
3. 多進程間的通信 :
進程間獨立,如果想相互訪問,就必須有一個中間翻譯,下面提供了幾種進程間通信的方法。
進程Queue
解析 :
Queue通信,相當于父進程賦值了一個Queue給子進程,子進程在這個Queue放好數據后,序列化一個中間翻譯,然后在反序列化返回給父進程,
因為進程之間內存獨立,不能傳遞對象傳遞的其實就是序列化的數據
Pipe
多進程還有一種數據傳遞方式叫管道原理和Queue相同
4. 進程鎖
雖然內存獨立,但是即使是打印也會造成打印數據錯誤,為了防止進程間搶屏幕打印輸出,加了進程鎖。
5. 進程池
創建一個子進程相當于copy一份父進程內存數據,為了防止頻繁創建,導致內存不足,所以有了進程池作為限制。
三 : 協程
1. 協程的簡單了解 :
協程又稱微線程,coroutne,協程是一種用戶態的輕量級線程。通俗點講就是周末我在家里休息,假如我先洗漱,再煮飯,再下載電影看會很慢,用了協程的效果就好比,我在下載電影的時候去點火煮飯,此時我馬上洗漱,等我洗漱好了,飯也好了,吃完飯了,電影下好了,我可以看了。
2. 協程的創建和使用:
gevent是一個三方庫,可以輕松通過gevent實現并發同步或者異步編程。
解析:嘗試運行發現,運行時間為Sleep最長的時間,也就是說協程能繞過IO,進行執行,極大的提高了效率.
IO(從硬盤上讀一塊數據,從網絡讀數據,從內存里讀一塊數據) 操作不占用CPU,計算占用CPU
3. 協程簡單爬網頁 :
4. 協程實現socketServer:
通過協程,我們可以寫出一個socketServer,真正socketServer的底層是用多線程來實現,我們用寫成寫出的效率很高,而且非常節省內存
四 : 總結
協程的優點:
線程在單線程下切換,減少資源消耗
無需原子操作控制流,簡化編程模型
高并發,高擴展,低成本.
無論是多進程,多線程還是協程在不同的場景用不同的模型才能高效的完成任務.
-
cpu
+關注
關注
68文章
10905瀏覽量
213031 -
python
+關注
關注
56文章
4807瀏覽量
85040
原文標題:Python篇-多進程與協程的理解與使用
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論