自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python Library中Condition的具體操作方案

開發(fā) 后端
本人對(duì)Python Library這一計(jì)算機(jī)語言十分感興趣,以下的文章就是對(duì)Python Library中Condition的具體實(shí)際應(yīng)用操作的介紹,和你一起分享。

你對(duì)Python 這一計(jì)算機(jī)語言感興趣嗎?你了解Python Library中Condition的具體實(shí)際應(yīng)用操作的具體方法嗎?假如你對(duì)Python Library的相關(guān)操作步驟感興趣的話,你可以點(diǎn)擊我們的文章對(duì)其進(jìn)行一個(gè)更好的了解。

Condition 算是 Lock 和 Event 的雜交版本,除了作為 Lock 的基本功能外,還提供了 wait() 和 notify() 作為線程間 "消息通知"。

 

  1. from threading import *  
  2. from time import *  
  3. condi = Condition()  
  4. def t1():  
  5. condi.acquire()  
  6. try:  
  7. for i in range(10):  
  8. print currentThread().name, i  
  9. sleep(1)  
  10. if (i == 4): condi.wait()    

# wait() 釋放鎖,并進(jìn)入等待狀態(tài)。直到接收到 notify() 發(fā)送的消息后再次試圖獲取鎖,繼續(xù)后續(xù)代碼執(zhí)行。

  1. finally:  
  2. condi.release()  
  3. def t2():  
  4. condi.acquire()  
  5. try:  
  6. for i in range(10):  
  7. print currentThread().name, i  
  8. sleep(1)  
  9. finally:  
  10. condi.notify()   

# 在釋放鎖前通知等待的線程準(zhǔn)備起床。

  1. condi.release()  
  2. Thread(target=t1).start()  
  3. Thread(target=t2).start()  

 

輸出:

  1. $ ./main.py  
  2. Thread-1 0  
  3. Thread-1 1  
  4. Thread-1 2  
  5. Thread-1 3   

Thread-1 4 <--- Thread1 釋放鎖,開始等待。Thread-2 0 <--- Thread2 獲得鎖,開始執(zhí)行。

  1. Thread-2 1  
  2. Thread-2 2  
  3. Thread-2 3  
  4. Thread-2 4  
  5. Thread-2 5  
  6. Thread-2 6  
  7. Thread-2 7  
  8. Thread-2 8  

Thread-2 9 <--- Thread2 發(fā)送通知,并釋放鎖。Thread-1 5 <--- Thread1 收到消息,再次拿到鎖,開始未完成的工作。

  1. Thread-1 6  
  2. Thread-1 7  
  3. Thread-1 8  
  4. Thread-1 9 

 

wait() 實(shí)際可以分解為 "condi.release(); ... acquire()" 這兩個(gè)動(dòng)作。我們可以使用 Condition 包裝已有的鎖,當(dāng)然也可以用 with/as 來改善我們的代碼。

 

  1. lock = RLock()  
  2. condi = Condition(lock)  
  3. def t1():  
  4. with condi:  
  5. for i in range(10):  
  6. print currentThread().name, i  
  7. sleep(1)  
  8. if (i == 4): condi.wait()  
  9. def t2():  
  10. with lock:  
  11. for i in range(10):  
  12. print currentThread().name, i  
  13. sleep(1)  
  14. condi.notify()  
  15. Thread(target=t1).start()  
  16. Thread(target=t2).start()   

 

注意調(diào)用 notify() 和 notifyall() 的線程必須事先獲得鎖,否則會(huì)拋出異常。

【編輯推薦】

  1. Python數(shù)組中實(shí)際應(yīng)用的數(shù)據(jù)結(jié)構(gòu)的操作方案
  2. Python字符串中字符的大寫與小寫的變化
  3. Python二維數(shù)組在創(chuàng)建過程中步驟詳解
  4. 使用Python串口時(shí)應(yīng)用到的模塊有哪些
  5. 使用Python串口時(shí)應(yīng)用到的模塊有哪些
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-03-24 10:06:37

Python嵌入C++

2010-03-12 11:03:30

Python學(xué)習(xí)

2010-03-17 13:14:00

Python Libr

2010-05-14 14:46:38

MySQL手動(dòng)安裝

2010-08-02 17:20:12

nfs啟動(dòng)Linux

2010-07-26 13:30:23

2009-12-30 15:47:40

Silverlight

2010-08-02 12:34:09

ADSL代理設(shè)置

2010-03-17 12:53:43

Python Libr

2011-03-17 09:06:58

iptables映射端口

2010-07-15 19:46:40

關(guān)閉Telnet 23

2009-12-31 15:36:13

SilverLight

2010-03-25 17:39:37

Python web

2009-12-31 15:36:13

SilverLight

2010-04-02 08:42:32

Oracle 游標(biāo)

2010-04-01 17:25:46

Oracle死鎖進(jìn)程

2009-12-30 16:48:52

Silverlight

2009-12-09 09:28:12

配置靜態(tài)路由

2010-05-27 14:29:53

Linux查看進(jìn)程

2010-03-02 09:39:11

保護(hù)WCF服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)