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

Python同步隊列正確應用方式解析

開發
Python同步隊列的實現是一個比較重要的操作技巧。在實際編程中,我們會通過這一操作技術獲得更多的幫助,以完成一些特定功能。

我們今天將會通過Python同步隊列的相關介紹,來詳細分析一下這一編程語言中的多線程應用。希望對此又需要的朋友們可以通過本文介紹的內容充分的掌握這一應用技巧,以方便將來的實際應用。#t#

我們經常會采用生產者/消費者關系的兩個線程來處理一個共享緩沖區的數據。例如一個生產者線程接受用戶數據放入一個共享緩沖區里,等待一個消費者線程對數據 取出處理。但是如果緩沖區的太小而生產者和消費者兩個異步線程的速度不同時,容易出現一個線程等待另一個情況。為了盡可能的縮短共享資源并以相同速度工作 的各線程的等待時間,我們可以使用一個“隊列”來提供額外的緩沖區。

創建一個“隊列”對象

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

類即是一個隊列的同步實現。隊列長度可為無限或者有限。可通過Queue的構造函數的可選參數maxsize來設定隊列長度。如果maxsize小于1就表示隊列長度無限。

 

將一個值放入隊列中

 

  1. myqueue.put(10) 

調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為可選參數,默認為1。如果隊列當前為空且block為1,put()方法就使調用線程暫停,直到空出一個數據單元。如果block為0,put方法將引發Full異常。

將一個值從隊列中取出

 

  1. myqueue.get() 

調用隊列對象的get()方法從隊頭刪除并返回一個項目。可選參數為block,默認為1。如果隊列為空且block為1,get()就使調用線程暫停,直至有項目可用。如果block為0,隊列將引發Empty異常。

我們用一個Python同步隊列例子來展示如何使用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同步隊列示例代碼中實現了兩個類:生產者類Producer和消費者類Consumer。前者在一個隨機的時間內放入一個值到隊列queue中然后顯示出來,后者在一定隨機的時間內從隊列queue中取出一個值并顯示出來。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-01-25 11:29:33

Android計時器

2010-03-04 13:30:11

Python file

2010-02-22 14:09:08

WCF Dispose

2010-03-03 17:33:52

Python讀取XML

2010-03-05 15:01:29

Python解析XML

2010-02-05 14:12:46

C++聲明放置

2010-03-04 14:51:21

Python Conf

2021-07-02 16:13:01

區塊鏈金融數據庫

2010-05-28 15:16:40

MySQL 資源

2009-12-07 14:38:14

PHP foreach

2010-02-22 10:42:12

WCF Stream

2010-03-04 09:40:52

Python Clas

2010-05-25 18:01:35

linux MySQL

2010-05-28 19:20:36

MySQL mysql

2010-03-04 14:02:51

Python大小寫

2010-07-21 10:50:48

SQL Server存

2010-07-26 17:43:34

SQL Server

2010-02-05 17:49:24

C++常量引用

2010-02-01 15:26:44

C++ inline函

2010-08-18 16:45:40

IBM DB2 Cat
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频亚洲 | 色综合99 | 国产日韩欧美一区 | 狠狠爱视频 | 国产色婷婷精品综合在线手机播放 | www.99热| 亚洲一区二区三区在线视频 | 国产国产精品 | 精品影院| 日韩精品不卡 | 日日骚视频 | 欧美4p| 日韩欧美网| 精品一区二区久久久久久久网精 | 日本免费一区二区三区 | 一区二区三区精品视频 | 国产在线一区二 | 久久精品视频91 | 中文字幕乱码一区二区三区 | 国产一级毛片视频 | 国产乱码精品一区二区三区中文 | 欧美日韩国产精品一区二区 | 久久一| 天天操天天干天天曰 | 欧美最猛黑人 | 麻豆hd| 精品一区二区三区在线观看 | 亚洲精品视频在线播放 | 日日噜噜噜夜夜爽爽狠狠视频97 | 日韩国产三区 | 在线观看免费av网 | 久久精品国产一区二区电影 | 久久久精 | 精品免费国产一区二区三区四区介绍 | 天天插天天操 | 久久久高清 | 国产精品毛片久久久久久 | 亚洲 欧美 另类 综合 偷拍 | 黄色大片观看 | 亚洲国产91| 999热视频 |