日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 之 GIL(线程和进程的应用)

發布時間:2024/4/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 之 GIL(线程和进程的应用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、GIL:http://www.tuicool.com/articles/7zIra2r

     ?http://www.zhihu.com/question/23474039

二、線程鎖

  在threading模塊中,定義兩種類型的鎖:threading.Lock和threading.RLock。它們之間有一點細微的區別,通過比較下面兩段代碼來說明:

  • import?threading??
  • lock?=?threading.Lock()?#Lock對象??
  • lock.acquire()??
  • lock.acquire()??#產生了死鎖。??
  • lock.release()??
  • lock.release()??
  • import?threading??
  • rLock?=?threading.RLock()??#RLock對象??
  • rLock.acquire()??
  • rLock.acquire()?#在同一線程內,程序不會堵塞。??
  • rLock.release()??
  • rLock.release() ?
  •   這兩種瑣的主要區別是:RLock允許在同一線程中被多次acquire。而Lock卻不允許這種情況。注意:如果使用RLock,那么acquire和release必須成對出現,即調用了n次acquire,必須調用n次的release才能真正釋放所占用的鎖。threading.Condition

      可以把Condiftion理解為一把高級的鎖,它提供了比Lock, RLock更高級的功能,允許我們能夠控制復雜的線程同步問題。threadiong.Condition在內部維護一個鎖對象(默認是RLock),可以在創建Condigtion對象的時候把鎖對象作為參數傳入。Condition也提供了acquire, release方法,其含義與鎖的acquire, release方法一致,其實它只是簡單的調用內部鎖對象的對應的方法而已。Condition還提供了如下方法(特別要注意:這些方法只有在占用鎖(acquire)之后才能調用,否則將會報RuntimeError異常。):

    Condition.wait([timeout]):??

      wait方法釋放內部所占用的鎖,同時線程被掛起,直至接收到通知被喚醒或超時(如果提供了timeout參數的話)。當線程被喚醒并重新占有鎖的時候,程序才會繼續執行下去。

    Condition.notify():

      喚醒一個掛起的線程(如果存在掛起的線程)。注意:notify()方法不會釋放所占用的鎖。

    Condition.notify_all()
    Condition.notifyAll()

      喚醒所有掛起的線程(如果存在掛起的線程)。注意:這些方法不會釋放所占用的鎖。

    三、注意事項

    Python由于有全鎖局的存在(同一時間只能有一個線程執行),并不能利用多核優勢。所以,如果你的多線程進程是CPU密集型的,那多線程并不能帶來效率上的提升,相反還可能會因為線程的頻繁切換,導致效率下降;如果是IO密集型,多線程進程可以利用IO阻塞等待時的空閑時間執行其他線程,提升效率。

    轉載于:https://www.cnblogs.com/work115/p/5625837.html

    總結

    以上是生活随笔為你收集整理的python 之 GIL(线程和进程的应用)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。