日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python同步隊(duì)列正確應(yīng)用方式解析

我們今天將會(huì)通過(guò)Python同步隊(duì)列的相關(guān)介紹,來(lái)詳細(xì)分析一下這一編程語(yǔ)言中的多線程應(yīng)用。希望對(duì)此又需要的朋友們可以通過(guò)本文介紹的內(nèi)容充分的掌握這一應(yīng)用技巧,以方便將來(lái)的實(shí)際應(yīng)用。#t#

成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供大柴旦網(wǎng)站建設(shè)、大柴旦做網(wǎng)站、大柴旦網(wǎng)站設(shè)計(jì)、大柴旦網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、大柴旦企業(yè)網(wǎng)站模板建站服務(wù),十多年大柴旦做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

我們經(jīng)常會(huì)采用生產(chǎn)者/消費(fèi)者關(guān)系的兩個(gè)線程來(lái)處理一個(gè)共享緩沖區(qū)的數(shù)據(jù)。例如一個(gè)生產(chǎn)者線程接受用戶(hù)數(shù)據(jù)放入一個(gè)共享緩沖區(qū)里,等待一個(gè)消費(fèi)者線程對(duì)數(shù)據(jù) 取出處理。但是如果緩沖區(qū)的太小而生產(chǎn)者和消費(fèi)者兩個(gè)異步線程的速度不同時(shí),容易出現(xiàn)一個(gè)線程等待另一個(gè)情況。為了盡可能的縮短共享資源并以相同速度工作 的各線程的等待時(shí)間,我們可以使用一個(gè)“隊(duì)列”來(lái)提供額外的緩沖區(qū)。

創(chuàng)建一個(gè)“隊(duì)列”對(duì)象

 
 
 
  1. import Queue  
  2. myqueue = Queue.Queue(maxsize = 10)Queue.Queue 

類(lèi)即是一個(gè)隊(duì)列的同步實(shí)現(xiàn)。隊(duì)列長(zhǎng)度可為無(wú)限或者有限??赏ㄟ^(guò)Queue的構(gòu)造函數(shù)的可選參數(shù)maxsize來(lái)設(shè)定隊(duì)列長(zhǎng)度。如果maxsize小于1就表示隊(duì)列長(zhǎng)度無(wú)限。

將一個(gè)值放入隊(duì)列中

 
 
 
  1. myqueue.put(10) 

調(diào)用隊(duì)列對(duì)象的put()方法在隊(duì)尾插入一個(gè)項(xiàng)目。put()有兩個(gè)參數(shù),第一個(gè)item為必需的,為插入項(xiàng)目的值;第二個(gè)block為可選參數(shù),默認(rèn)為1。如果隊(duì)列當(dāng)前為空且block為1,put()方法就使調(diào)用線程暫停,直到空出一個(gè)數(shù)據(jù)單元。如果block為0,put方法將引發(fā)Full異常。

將一個(gè)值從隊(duì)列中取出

 
 
 
  1. myqueue.get() 

調(diào)用隊(duì)列對(duì)象的get()方法從隊(duì)頭刪除并返回一個(gè)項(xiàng)目。可選參數(shù)為block,默認(rèn)為1。如果隊(duì)列為空且block為1,get()就使調(diào)用線程暫停,直至有項(xiàng)目可用。如果block為0,隊(duì)列將引發(fā)Empty異常。

我們用一個(gè)Python同步隊(duì)列例子來(lái)展示如何使用Queue# queue_example.py

 
 
 
  1. from Queue import Queue  
  2. import threading  
  3. import random  
  4. import time  
  5. # Producer thread  
  6. class Producer(threading.Thread):  
  7. def __init__(self, threadname, queue):  
  8. threading.Thread.__init__(self, name = threadname)  
  9. self.sharedata = queue 
  10. def run(self):  
  11. for i in range(20):  
  12. print self.getName(),’adding’,i,’to queue’  
  13. self.sharedata.put(i)  
  14. time.sleep(random.randrange(10)/10.0)  
  15. print self.getName(),’Finished’  
  16. # Consumer thread  
  17. class Consumer(threading.Thread):  
  18. def __init__(self, threadname, queue):  
  19. threading.Thread.__init__(self, name = threadname)  
  20. self.sharedata = queue 
  21. def run(self):  
  22. for i in range(20):  
  23. print self.getName(),’got a value:’,self.sharedata.get()  
  24. time.sleep(random.randrange(10)/10.0)  
  25. print self.getName(),’Finished’  
  26. # Main thread  
  27. def main():  
  28. queue = Queue()  
  29. producer = Producer(’Producer’, queue)  
  30. consumer = Consumer(’Consumer’, queue)  
  31. print ‘Starting threads …’  
  32. producer.start()  
  33. consumer.start()  
  34. producer.join()  
  35. consumer.join()  
  36. print ‘All threads have terminated.’  
  37. if __name__ == ‘__main__’:  
  38. main() 

Python同步隊(duì)列示例代碼中實(shí)現(xiàn)了兩個(gè)類(lèi):生產(chǎn)者類(lèi)Producer和消費(fèi)者類(lèi)Consumer。前者在一個(gè)隨機(jī)的時(shí)間內(nèi)放入一個(gè)值到隊(duì)列queue中然后顯示出來(lái),后者在一定隨機(jī)的時(shí)間內(nèi)從隊(duì)列queue中取出一個(gè)值并顯示出來(lái)。


標(biāo)題名稱(chēng):Python同步隊(duì)列正確應(yīng)用方式解析
路徑分享:http://www.5511xx.com/article/dhijejh.html