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

對Python線程內容進行全講析

開發 后端
下面進行對Python線程內容進行分析研究,其中主要內容包括,Python線程的定義和一些規范,接下來就為大家進行對Python線程的講析。

怎么區分哪個Python線程對應哪個狀態對象呢?首先考慮的是我們還有線程的ID。ID存儲的正是各個線程的ID,根據這些ID,就可以輕輕松松的進行Python線程內容的尋找了。

每一個線程對應的線程狀態對象都保存著這個線程當前的PyFrameObject對象,線程的id這樣一些信息。有時候,線程是需要訪問這些信息的。比如考慮一個最簡單的情形,在某種情況下。

每個線程都需要訪問線程狀態對象中所保存的thread_id信息,顯然,線程A獲得的應該是A的thread_id,線程B亦然。倘若線程A獲得的是B的thread_id,那就壞菜了。這就意味著Python內部必須有一套機制,這套機制與操作系統管理進程的機制非常類似。

我們知道,在操作系統從進程A切換到進程B時,首先會保存進程A的上下文環境,再進行切換;當從進程B切換回進程A時,又會恢復進程A的上下文環境,這樣就保證了進程A始終是在屬于自己的上下文環境中運行。

這里的線程狀態對象就等同于進程的上下文,Python線程內容同樣會有一套存儲、恢復線程狀態對象的機制。同時,在Python內部,維護著一個全局變量:PyThreadState * _PyThread- State_Current。

當前活動線程所對應的線程狀態對象就保存在這個變量里,當Python調度線程時,會將被激活的線程所對應的線程狀態對象賦給_PyThreadState_Current,使其始終保存著活動線程的狀態對象。

這就引出了這樣的一個問題:Python如何在調度進程時,獲得被激活線程對應的狀態對象?Python內部會通過一個單向鏈表來管理所有的Python線程的狀態對象。當需要尋找一個線程對應的狀態對象時,就遍歷這個鏈表,搜索其對應的狀態對象。在此后的描述中,我們將這個鏈表稱為“狀態對象鏈表”。

下面我們來看一看實現這個機制的關鍵數據結構。PyThread_create_key將創建一個新的key。注意,這里的key都是一個整數。而且,當PyThread_create_key***次被調用時(在_PyGILState_Init中的調用正是***次調用),會通過PyThread_allcate_lock創建一個keymutex。

根據我們前面的分析,這個keymutex實際上和GIL一樣,都是一個PNRMUTEX結構體,而在這個結構體中,維護著一個Win32下的Event內核對象。這個keymutex的功能就是用來互斥對狀態對象鏈表的訪問。

在_PyGILState_Init中,創建的新key被Python維護的全局變量autoTLSkey接收,其中的TLS是Thread Local Store的縮寫。這個autoTLSkey將用作Python保存所有線程的狀態對象的一個參數,即是圖15-6中的key值。也就是說,狀態對象列表中所有key結構體中的key值都會是autoTLSkey。

哎,那位看官說了,你看PyThread_create_key返回的是nkeys的遞增后的值啊,就是說每create一次,得到的結果都是不同的,怎么能說所有的key都是一樣的呢?事實上,在整個Python的源碼中,PyThread_create_key只在_PyGILState_Init中被調用了,而這個_PyGILState_Init只會在Python運行時環境初始化時調用一次。

Python主界面

雖然這個核心函數的名字叫find_key,然而我們可以看到,它的作用并不僅僅是搜索,而且還包含了創建的動作。在代碼清單15-3的[2]處,find_key會遍歷狀態對象列表,搜索key和id都匹配的key結構體。

如果搜索成功,則直接返回;而當搜索失敗時,find_key會在代碼清單15-3的[3]處創建一個新的key結構體,并設置其中的id,key和value,***將其插入到狀態對象列表的頭部。

在代碼清單15-3的[1]和[4]處我們看到了Python確實通過在_PyGILState_Init中創建的keymutex來互斥對狀態對象列表的訪問。在了解了這個核心函數之后,Python線程內容為狀態對象列表所提供的接口就顯得非常清晰了。其實,就是簡單的鏈表的插入、刪除和查詢操作。

【編輯推薦】

  1. 漫談Python 源代碼編制技巧
  2. 簡單易于操作的Python 工具詳解
  3. 有關Python應用領域進行說明介紹
  4. PythonAndroid面向對象的編程——Python應用程序
  5. 如何使用Python模塊解析配置文件 ?
責任編輯:chenqingxiang 來源: CSDN
相關推薦

2010-02-22 11:02:55

Python功能

2009-12-09 09:49:56

VS .NET 200

2010-02-04 16:43:18

Android 配置問

2010-02-04 13:43:20

Android操作系統

2010-02-22 10:18:29

Python代碼

2010-03-01 14:28:46

Python進程

2010-01-20 11:02:42

C++開發環境

2009-09-24 12:50:23

Hibernate F

2009-12-25 16:46:48

ADO調用存儲過程

2010-01-05 15:48:51

JQuery緩存

2010-03-18 15:57:07

太網交換機

2010-03-03 14:51:02

Android手機

2010-02-23 15:29:43

Python 編輯器

2010-02-26 09:42:52

Python線程池

2009-12-08 17:08:13

WCF Service

2010-03-04 16:38:37

Android開發技巧

2010-01-14 09:27:44

C++語言

2010-02-05 15:22:14

2010-09-29 14:04:25

RHCE DHCP配置

2010-09-16 12:02:44

vpdn pppoe配
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频精品 | 亚洲性人人天天夜夜摸 | 成人在线免费观看 | 久久久这里都是精品 | 成人久久网 | 亚洲成人一区二区在线 | 天天干干| 亚洲视频一区二区三区 | 亚洲国产精品成人无久久精品 | 国产 日韩 欧美 制服 另类 | 韩日一区二区 | 久久大陆 | 国产综合av| 婷婷综合网 | 亚洲性人人天天夜夜摸 | 国外成人在线视频网站 | 国产男女视频网站 | 国产激情综合五月久久 | 午夜视频免费在线观看 | 毛片久久久 | 成人一区二区三区 | av片网| 秋霞av国产精品一区 | 久久人 | 欧美日韩最新 | 亚洲欧美一区二区三区视频 | 在线观看久草 | 午夜精品一区二区三区在线观看 | 国产精品2 | 在线国产中文字幕 | 色妞av | 久久99精品久久久 | 91文字幕巨乱亚洲香蕉 | 男人的天堂avav | 综合久久久 | 国产一区视频在线 | 国产中文| 欧美成年视频 | 日韩免费1区二区电影 | 天天玩天天操天天干 | 成人国产免费观看 |