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

如何進行Python主線程設置

開發 后端
你建立一個程序,就是一個進程,其中包含一個線程,這個就是Python主線程,那么創建的線程就是這個主線程的子線程。

下面給大家一個寶貴的建議,對于那些從來沒有學習過編程或者并非計算機專業的編程學習者而言,Python主線程是最好的選擇之一,并建議那些初學的程序員先從Python開始學習編程。

如果waitflag為0,Python會檢查當前GIL是否可用,GIL中的owned是指示GIL是否可用的變量,在前面的InitializeNonRecursiveMutex中我們看到這個值被初始化為-1,Python會檢查這個值是否為-1,如果是,則意味著GIL可用。

必須將其置為0,當owned為0后,表示該GIL已經被一個線程占用,不再可用。對于我們這里分析的調用PyEval_InitThread的主線程而言,由于在初始化GIL之后就調用PyThread_ acquire_lock申請GIL。

到這時,并沒有第二個線程被創建,所以主線程會輕而易舉地獲得GIL的使用權。注意這里的檢查和更新owned的操作是通過一個Win32的系統API——Interlocked- CompareExchange——來完成的。這個API是一個原子操作,其函數原形和功能如下。

與InterlockedCompareExchange相同的,InterlockedIncrement也是一個原子操作,其功能是將mutex->owned的值增加1。從這里可以看到,當一個線程開始等待GIL時,其owned就會被增加1。

顯然我們可以猜測,當一個線程最終釋放GIL時,一定會將GIL的owned減1,這樣當所有需要GIL的線程都最終釋放了GIL之后,owned會再次變為-1,意味著GIL再次變為可用。

為了清晰地展示這一點,我們現在就來看看PyThread_aquire_lock的逆運算,PyThread_release_lock每一個將從運行轉態轉為等待狀態的線程都會在被掛起之前調用它以釋放對GIL的占有。

  1. void PyThread_release_lock(PyThread_type_lock aLock)  
  2.  
  3. {  
  4.  
  5.     LeaveNonRecursiveMutex((PNRMUTEX) aLock);  
  6.  
  7. }  
  8.  
  9. BOOL LeaveNonRecursiveMutex(PNRMUTEX mutex)  
  10.  
  11. {  
  12.  
  13.     /* We don't own the mutex */  
  14.  
  15.     mutex->thread_id = 0 ;  
  16.  
  17.     return  
  18.  
  19.         InterlockedDecrement(&mutex->owned) < 0 ||  
  20.  
  21.         SetEvent(mutex->hevent) ; /* Other threads are waiting, wake one on  
  22.  
  23.            them up */  
  24.  
  25. }  

最終,一個線程在釋放GIL時,會通過SetEvent通知所有在等待GIL的hevent這個Event內核對象的線程,結合前面的分析。如果這時候有線程在等待GIL的hevent,那么將被操作系統喚醒。這就是我們在前面介紹的Python主線程將線程調度的第二個難題委托給操作系統來實現的機制。

到了這時,調用PyEval_InitThread的線程(也就是Python主線程)已經成功獲得了GIL,最后會調用PyThread_get_thread_ident(),通過Win32的API:GetCurrent- ThreadId,獲得當前Python主線程的id。

【編輯推薦】

  1. 如何使Python嵌入C++應用程序?
  2. 深入探討Ruby與Python語法比較
  3. Python學習資料介紹分享
  4. Python學習經驗談:版本、IDE選擇及編碼解決方案
  5. 淺析Python的GIL和線程安全
責任編輯:chenqingxiang 來源: 人民郵電出版社
相關推薦

2010-02-01 17:33:24

Python主線程

2010-03-10 19:34:45

Python主線程

2011-07-28 14:07:30

2010-02-03 13:55:51

Python 代碼

2010-02-01 10:21:36

Python編碼轉換

2010-02-22 16:05:40

Python配置

2024-07-08 08:38:37

Python游戲開發

2010-02-26 15:37:11

Python主線程

2009-08-06 15:03:11

行虛擬機Apache設

2010-02-01 18:20:17

Python 多重繼承

2010-03-11 17:38:20

Python中文

2010-03-15 15:11:50

Python列表

2010-05-27 16:18:58

SVN設置

2010-03-16 10:32:36

Java線程撥號器

2010-02-01 14:48:43

2009-12-10 17:19:05

Visual Stud

2010-02-01 16:22:36

Python字符串操作

2010-03-01 11:06:52

Python 調試器

2010-03-15 15:45:15

Python編程語言

2010-09-07 13:27:50

無線網絡中繼設置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av资源在线看 | 久久久这里都是精品 | 久久精品色欧美aⅴ一区二区 | 国产福利免费视频 | 超碰520| 日本高清视频在线播放 | 国产精品波多野结衣 | 91香蕉视频在线观看 | 一区二区不卡视频 | 日本三级电影免费观看 | 欧美日韩在线一区二区三区 | 亚洲 欧美 综合 | 国产一区二区电影网 | 国产精品视频网 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 日本成年免费网站 | 国产99久久精品一区二区永久免费 | 在线黄色影院 | 狠狠视频| heyzo在线 | 亚洲精品在线看 | 亚洲区一| 日韩欧美在线一区 | 国产综合久久 | 久久69精品久久久久久国产越南 | 欧美天堂 | 欧美性精品 | 久久久久久久一区 | 成人精品系列 | 一区二区三区视频 | 国产精品久久福利 | 久久亚洲一区二区 | 国产视频中文字幕 | 伊人久久综合 | 免费一级黄 | 国产欧美日韩精品一区二区三区 | 久久伊人精品 | julia中文字幕久久一区二区 | ww 255hh 在线观看 | av手机免费在线观看 | 岛国在线免费观看 |