成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細講解Python線程應用程序操作

開發 后端
在進行調用Python線程應用程序時,會在_limbo中記錄線程,然后通過thread.start_new_thread創建原生線程,把線程創建的過程為bootstrap。

Python線程應用程序中的提供的低級的線程控制工具有thread module,一些為了簡化多線程應用的開發程序員,用Python語言在thread的基礎上構建了一個高級的線程控制庫——threading。

在這一節中,我們將剖析threading的具體實現。在剖析threading的具體實現之前,我們先來看看threading是如何使用的。我們知道通過threading.Thread創建多線程,有兩個階段,第一階段是調用threading.Thread.start,而第二階段是在threading.Thread.start中調用threading.Thread.run。

當處于第一階段時,還沒有調用thread.start_new_thread創建原生子線程,這時候線程記錄在_limbo中。由于沒有創建子線程,所以現在沒有線程id,記錄的方式為_limbo[thread] = thread。

在第二階段,已經成功地調用thread. start_new_thread創建了原生子線程,這時將從_limbo中刪除子線程,而將子線程記錄到_active中,記錄的方式為_active[thread_id] = thread。可見。

Python這兩個dict分別維護了已經創建和等待創建的子線程集合。對這兩個dict的訪問_active_limbo_ lock的保護之下進行。在threading module中,提供了列舉當前所有子線程的操作:threading. enumerate。這個操作很簡單,就是將_active和_limbo中維護的線程集合的信息輸出。

在thread module中,Python提供了用戶級的線程同步工具:Lock對象。而在threading module中,Python提供了不同的用于線程同步的工具。以簡化Python線程應用程序序。這些threading中的線程同步工具實際上都是建立在thread所提供的Lock對象的基礎上的。

通過調用threading.Lock,我們就可以創建一個thread中的Lock對象,如前面所描述的,在這個對象上,我們可以進行acquire、release等操作。在threading中的其他線程同步工具都是在這個Lock對象的基礎上,下面我們將對這些線程同步工具做一個概述性的介紹,具體的實現請讀者參閱threading.py。

RLock對象是Lock對象的一個變種,其內部維護著一個Lock對象,但是它是一種可重入的Lock。一般地,對于Lock對象而言,如果一個線程連續兩次進行acquire操作。那么由于第一次acquire之后沒有release,第二次acquire將掛起線程,這將直接導致Lock對象永遠不會release,因此線程死鎖。

RLock對象允許一個線程多次對其進行acquire操作,因為在其內部通過一個counter變量維護著線程acquire的次數。而且每一次的acquire操作必須有一個release操作與之對應,在所有的release操作都完成之后,別的線程才能申請該RLock對象。

Python線程應用程序對象是對Lock對象的包裝,在創建Condition對象時,其構造函數需要一個Lock對象作為參數,如果沒有這個Lock對象參數,Condition將在內部自行創建一個Rlock對象。

在Condition對象上,當然也可以調用acquire和release操作,因為內部的Lock對象本身就支持這些操作。但是Condition的價值在于其提供的wait和notify的語義。假設有Condition對象C,當線程A調用C.wait()時,線程A將釋放C中的Lock對象,并進入阻塞狀態。

直到有別的線程調用C.notify(),A才會重新通過acquire申請C中的Lock對象,并退出wait操作。Semaphore對象內部維護著一個Condition對象,對于管理一組共享資源非常有用。Lock對象可以保護一個共享資源,但是假如我們有一個共享資源池,其中有5個共享資源A。

這意味著可以有5個線程同時自由地訪問這些資源,然而如果使用Lock來對共享資源進行保護的話,所有的線程都將互斥,這使得有4個資源A被浪費了。Semaphore正是在Condition的基礎上實現的對共享資源池進行保護的線程同步機制。Semaphore提供了兩個操作:acquire和release,都具有與Lock相同的語義。

當線程調用Semaphore. acquire時,如果共享資源池中還有剩余的A時,線程就會繼續執行;而如果資源池中已經沒有任何資源存在了,線程就會將自身掛起,直到別的線程調用Semaphore.release釋放一個資源。

與Semaphore類似,Event對象實際上也是對Condition對象的一種包裝,只是提供了獨有的set和wait語義。Event類的代碼很簡單,有興趣的讀者可以參考threading.py。在thread3.py中我們看到,threading中一個關鍵的組件是threading.Thread,在這一節中我們來看一看它的具體實現。在threading.Thread的實現中,你會發現我們前面提到的許多機制。

【編輯推薦】

  1. 有關Python系統文件進行介紹指導
  2. 如何正確的使用Python函數
  3. 對Python 構建工具進行詳細介紹分析
  4. PythonAndroid淺析Python優勢所在
  5. 如何使用Python模塊解析配置文件?
責任編輯:chenqingxiang 來源: 博客園
相關推薦

2009-09-27 17:23:16

Hibernate應用

2009-10-10 13:56:44

IIS應用程序VB開發

2009-10-27 12:20:06

VB.NET多線程應用

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2009-12-25 10:39:49

WPF應用程序關閉

2010-03-03 17:56:44

Android應用程序

2011-07-26 11:13:15

iPhone PXL

2021-09-26 08:30:31

Python應用程序代碼

2009-12-21 11:22:37

Linux網絡操作命令

2011-07-19 11:12:07

iPhone 控制器

2011-07-19 10:42:41

iPhone 應用程序 模型

2011-07-19 10:56:15

iPhone 控制器 視圖

2010-02-01 14:05:03

2010-02-22 17:46:57

Python應用程序

2011-12-07 12:01:31

ibmdw

2010-02-02 15:37:11

2010-02-26 11:08:29

Python應用程序

2024-06-24 10:53:23

2009-10-09 17:01:32

VB.NET多線程

2011-07-12 10:59:41

JAVA多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美群妇大交群中文字幕 | 亚洲a网| 欧美日韩一 | 91视视频在线观看入口直接观看 | h视频在线看 | 日本精品一区二区 | 激情国产在线 | 91精品久久久久久久99 | 亚洲一区二区三区在线播放 | 欧美日韩中文在线观看 | 成人片免费看 | 精品一区二区三区91 | 精品久久久久久久久久久久久 | 一区二区精品 | 国产东北一级毛片 | 亚洲精品久久久久久久久久久久久 | 亚洲毛片在线 | 91青青草视频| 日韩精品在线播放 | 在线91| 国产精品网址 | 麻豆精品久久久 | 91人人澡人人爽 | 亚洲一区中文字幕 | 亚洲国产18 | 日日操日日干 | 成人国产精品免费观看视频 | 久久丝袜| 91在线色视频 | 国产在线观看免费 | 国产精品久久久久久久久久久久 | 九九在线视频 | 国产一区二区三区免费观看视频 | 国产精品久久久久一区二区三区 | 51ⅴ精品国产91久久久久久 | 激情国产在线 | 中文字幕不卡在线观看 | 亚洲一区二区在线 | 亚洲高清视频一区二区 | 一区二区三区精品在线视频 | 日韩插插|