<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

        創建一個“隊列”對象

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

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

        將一個值放入隊列中

        myqueue.put(10)

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

        將一個值從隊列中取出

        myqueue.get()

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

        我們用一個例子來展示如何使用Queue

    # queue_example.py
    from Queue import Queue
    import threading
    import random
    import time

    # Producer thread
    class Producer(threading.Thread):
        def __init__(self, threadname, queue):
            threading.Thread.__init__(self, name = threadname)
            self.sharedata = queue
        def run(self):
            for i in range(20):
                print self.getName(),'adding',i,'to queue'
                self.sharedata.put(i)
                time.sleep(random.randrange(10)/10.0)
            print self.getName(),'Finished'

    # Consumer thread
    class Consumer(threading.Thread):
        def __init__(self, threadname, queue):
            threading.Thread.__init__(self, name = threadname)
            self.sharedata = queue
        def run(self):
            for i in range(20):
                print self.getName(),'got a value:',self.sharedata.get()
                time.sleep(random.randrange(10)/10.0)
            print self.getName(),'Finished'

    # Main thread
    def main():
        queue = Queue()
        producer = Producer('Producer', queue)
        consumer = Consumer('Consumer', queue)

        print 'Starting threads ...'
        producer.start()
        consumer.start()

        producer.join()
        consumer.join()

        print 'All threads have terminated.'

    if __name__ == '__main__':
        main()

        示例代碼中實現了兩個類:生產者類Producer和消費者類Consumer。前者在一個隨機的時間內放入一個值到隊列queue中然后顯示出來,后者在一定隨機的時間內從隊列queue中取出一個值并顯示出來。

    posted on 2007-09-25 16:02 周銳 閱讀(509) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 毛片大全免费观看| 无人在线观看免费高清视频| 在线日韩av永久免费观看| 亚洲人成影院77777| 男女免费观看在线爽爽爽视频| 亚洲国产精品不卡在线电影| 三年片在线观看免费观看大全一| 亚洲欧洲日产国码无码网站| 免费在线看污视频| 亚洲人成电影福利在线播放| 免费女人高潮流视频在线观看| 亚洲美女视频一区二区三区| 2021国产精品成人免费视频| 久久精品国产亚洲av麻豆蜜芽| 女人18毛片水真多免费看 | 国产伦精品一区二区三区免费迷| 亚洲国产精品18久久久久久| 国产一区二区三区在线免费观看 | 午夜性色一区二区三区免费不卡视频| 亚洲无砖砖区免费| 在线观看视频免费国语| 免费看一级高潮毛片| 国产精品久久久亚洲| 天天影院成人免费观看| 亚洲AV无码一区二区三区牲色| 全部免费国产潢色一级| yy一级毛片免费视频| 亚洲AV综合色区无码另类小说| 最近免费中文字幕大全免费 | 久99精品视频在线观看婷亚洲片国产一区一级在线 | 免费a级毛片无码a∨蜜芽试看| 亚洲av无码片vr一区二区三区| JLZZJLZZ亚洲乱熟无码| 99re6热视频精品免费观看| 天堂亚洲国产中文在线| 亚洲欧洲精品成人久久曰影片| 久久久久久国产精品免费免费男同 | 亚洲系列国产精品制服丝袜第| 免费看美女被靠到爽| a毛片在线免费观看| 亚洲va精品中文字幕|