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

如何進行Python主線程設置

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

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

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

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

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

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

顯然我們可以猜測,當一個線程最終釋放GIL時,一定會將GIL的owned減1,這樣當所有需要GIL的線程都最終釋放了GIL之后,owned會再次變?yōu)?1,意味著GIL再次變?yōu)榭捎谩?/P>

為了清晰地展示這一點,我們現(xiàn)在就來看看PyThread_aquire_lock的逆運算,PyThread_release_lock每一個將從運行轉態(tài)轉為等待狀態(tài)的線程都會在被掛起之前調(diào)用它以釋放對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內(nèi)核對象的線程,結合前面的分析。如果這時候有線程在等待GIL的hevent,那么將被操作系統(tǒng)喚醒。這就是我們在前面介紹的Python主線程將線程調(diào)度的第二個難題委托給操作系統(tǒng)來實現(xiàn)的機制。

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

【編輯推薦】

  1. 如何使Python嵌入C++應用程序?
  2. 深入探討Ruby與Python語法比較
  3. Python學習資料介紹分享
  4. Python學習經(jīng)驗談:版本、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-01 10:21:36

Python編碼轉換

2010-02-22 16:05:40

Python配置

2024-07-08 08:38:37

Python游戲開發(fā)

2010-02-26 15:37:11

Python主線程

2010-02-03 13:55:51

Python 代碼

2009-08-06 15:03:11

行虛擬機Apache設

2010-02-01 14:48:43

2010-02-01 18:20:17

Python 多重繼承

2010-03-11 17:38:20

Python中文

2010-03-15 15:11:50

Python列表

2009-12-10 17:19:05

Visual Stud

2010-05-27 16:18:58

SVN設置

2010-03-16 10:32:36

Java線程撥號器

2010-02-22 17:12:34

Python對象

2010-03-01 16:32:36

Python語言

2010-03-09 18:14:55

Python sock

2010-04-08 16:26:12

無線網(wǎng)絡中繼設置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av免费 | 高清国产一区二区 | 国产精品激情小视频 | www国产亚洲精品 | 成人在线视频一区二区三区 | 99视频在线播放 | 国产精品久久777777 | 国产高清精品网站 | 91一区二区在线观看 | 久久精品二区 | 国产成人一区 | 国产在线观看一区二区三区 | 一区二区三区四区视频 | 国产精品久久久久久久久久软件 | 亚洲人成在线观看 | 免费的一级视频 | 久久精品免费 | 国产亚洲精品精品国产亚洲综合 | 国产成人精品久久二区二区91 | 成年女人免费v片 | 99这里只有精品 | 91精品国产91久久久久福利 | 久久精品中文字幕 | 国产精品色| 污片在线观看 | 少妇特黄a一区二区三区88av | 一级免费在线视频 | 成人黄色电影在线播放 | 成年人精品视频在线观看 | 国产精品亚洲精品 | 欧美中文在线 | 国内精品久久久久久 | 国产一级免费在线观看 | www.久久99| 在线观看精品 | 国产一区二区三区在线 | 欧美视频成人 | 国内精品久久影院 | 亚洲国产看片 | 精品一区二区三 | 一级做a爰片性色毛片视频停止 |