亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python如何支持并發(fā)方法詳解

 更新時間:2020年07月25日 15:20:23   作者:oaksharks  
這篇文章主要介紹了python如何支持并發(fā),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

由于GIL(Global Interpreter Lock)的存在使得在同一時刻Python進程只能使用CPU的一個核心,也就是對應(yīng)操作系統(tǒng)的一個
內(nèi)核線程,對于一個Python web程序,如果有個請求,并且都是長耗時的計算任務(wù)(占用),這個程序在接受第一個請求后
還能處理別的請求么?假如web程序接受到請求就while True了:

def handle_request(request):
 while True:
  pass

從代碼上理解,Python只有一個真正的執(zhí)行線程,代碼走到while True就占用唯一的一個cpu核心了,它還有機會處理
別的任務(wù)么?

來啟動兩個線程都進行while True ,觀察他們是否都能執(zhí)行來模擬那兩個請求:

import time, threading

def f1(name):
 while True:
  print(name)
  time.sleep(1)

threading.Thread(target=f1, args=('f1', )).start()
threading.Thread(target=f1, args=('f2', )).start()

輸出結(jié)果:

f1
f2
f2f1

f2
f1
...

實際上使用Django(一個Python Web 框架)測試,即使一個請求執(zhí)行了while True這樣的代碼,它還是可以處理別的請求(支持并發(fā));

來解釋一下為什么兩個while True 都能執(zhí)行:
還是用GIL這把鎖,第一個while True的線程拿到這把鎖才能執(zhí)行,然后它執(zhí)行了一個print(name)接著把鎖釋放了,
它就暫停了,接著第二個while True線程拿到GIL后開始執(zhí)行,圍繞GIL交替執(zhí)行,就實現(xiàn)了Python的多線程。

總結(jié)一下:

while True也不能一直持有CPU資源,它也是執(zhí)行一會歇一會,這就給了其他進程機會,這里面有兩個關(guān)鍵點:

  • 如何搶到這把鎖
  • 如何釋放鎖

搶鎖,排隊。給lock安排一個隊列,想執(zhí)行的進這個隊列。

釋放鎖的有點類似進程調(diào)度:

  • 劃分時間片(執(zhí)行一樣的時間)
  • 執(zhí)行指令計數(shù)(執(zhí)行一樣的指令次數(shù))
  • 碰到IO操作(被動等待)
  • 主動等待(wait/join/sleep)

碰到IO操作,需要等待IO設(shè)備完成計算才能繼續(xù)執(zhí)行線程,這段時間內(nèi)不占用CPU資源,先把鎖釋放了。
主動等待,典型的就是sleep,主動放棄鎖,等到一定時機再重新執(zhí)行。

以上分析 說明Python支持并發(fā),但是由于無法利用多核處理器優(yōu)勢,對于大量并發(fā)下的計算密集型應(yīng)用
不適合使用Python。

到此這篇關(guān)于python如何支持并發(fā)的文章就介紹到這了,更多相關(guān)python支持并發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows上使用Python增加或刪除權(quán)限的方法

    Windows上使用Python增加或刪除權(quán)限的方法

    下面小編就為大家分享一篇Windows上使用Python增加或刪除權(quán)限的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python分類測試代碼實例匯總

    Python分類測試代碼實例匯總

    這篇文章主要介紹了Python分類測試代碼實例匯總,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • jupyter的安裝與使用以及運行卡頓問題及解決

    jupyter的安裝與使用以及運行卡頓問題及解決

    這篇文章主要介紹了jupyter的安裝與使用以及運行卡頓問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python使用PyGame實現(xiàn)打磚塊游戲

    python使用PyGame實現(xiàn)打磚塊游戲

    打磚塊也是一個非常經(jīng)典的小游戲,玩法大致如下,用一個小車接一個小球,然后反射小球,使之打在磚塊上,當(dāng)小球碰到磚塊之后,則磚塊被消掉,邏輯十分清晰,本文將給大家介紹了python使用PyGame實現(xiàn)打磚塊游戲,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • OpenCV實現(xiàn)圖片編解碼實踐

    OpenCV實現(xiàn)圖片編解碼實踐

    在很多應(yīng)用中,經(jīng)常會直接把圖片的二進制數(shù)據(jù)進行交換,這就需要對普通進行編碼解碼,那么怎么才能實現(xiàn),本文就來介紹一下
    2021-06-06
  • 詳解Python3操作Mongodb簡明易懂教程

    詳解Python3操作Mongodb簡明易懂教程

    本篇文章主要介紹了詳解Python3操作Mongodb簡明易懂教程,詳細的介紹了如何連接數(shù)據(jù)庫和對數(shù)據(jù)庫的操作,有需要的可以了解一下。
    2017-05-05
  • python通過socket查詢whois的方法

    python通過socket查詢whois的方法

    這篇文章主要介紹了python通過socket查詢whois的方法,涉及Python基于socket模塊進行查詢的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Python Django模板系統(tǒng)詳解

    Python Django模板系統(tǒng)詳解

    這篇文章主要介紹Django模板系統(tǒng)Django模板系統(tǒng)的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 詳解Python如何獲取視頻文件的大小和時長

    詳解Python如何獲取視頻文件的大小和時長

    這篇文章主要為大家詳細介紹了Python如何實現(xiàn)獲取視頻文件的大小和時長,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • pandas實現(xiàn)滑動窗口的示例代碼

    pandas實現(xiàn)滑動窗口的示例代碼

    本文主要介紹了pandas實現(xiàn)滑動窗口的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論