<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                Queue模塊中提供了同步的、`線程安全`的隊列類,這些隊列都實現了`鎖原語`,能夠在多線程中直接使用。可以使用隊列來實現線程間的同步。 >* Queue.Queue 先進先出隊列 FIFO--First In First Out >* Queue.LifoQueue 后進先出隊列 LIFO-- Lasr In First Out >* Queue.PriorityQueue 優先級隊列 ## 常用方法 * qsize() 返回隊列長度 * task_done() 意味著之前入隊的一個任務已經完成。由隊列的消費者線程調用。每一個get()調用得到一個任務,接下來的task_done()調用告訴隊列該任務已經處理完畢。 如果當前一個join()正在阻塞,它將在隊列中的所有任務都處理完時恢復執行(即每一個由put()調用入隊的任務都有一個對應的task_done()調用)。 * join() 阻塞調用線程,直到隊列中的所有任務被處理掉。 只要有數據被加入隊列,未完成的任務數就會增加。當消費者線程調用task_done()(意味著有消費者取得任務并完成任務),未完成的任務數就會減少。當未完成的任務數降到0,join()解除阻塞。 * put(item[, block=True[, timeout]]) 如果可選的參數block為True且timeout為空對象(默認的情況,阻塞調用,無超時)。 如果timeout是個正整數,阻塞調用進程最多timeout秒,如果一直無空空間可用,拋出Full異常(帶超時的阻塞調用)。 如果block為False,如果有空閑空間可用將數據放入隊列,否則立即拋出Full異常 其非阻塞版本為put_nowait等同于put(item, False) * get([block=True[, timeout]]) 從隊列中移除并返回一個數據。block跟timeout參數同put方法 其非阻塞方法為`get_nowait()`相當與get(False) * empty() 如果隊列為空,返回True,反之返回False * full() 如果隊列為滿,返回True,反之返回False ## 例子 實現按優先級排列 ```python #!/usr/bin/env python # encoding: utf-8 import Queue import threading class Job(object): def __init__(self, priority, description): self.priority = priority self.description = description def __cmp__(self, other): """設置排序規則""" return cmp(self.priority, other.priority) def process_job(q): while True: job = q.get() print job.description q.task_done() q = Queue.PriorityQueue() q.put(Job(3, 'level 3 job')) q.put(Job(10, 'level 10 job')) q.put(Job(1, 'level 1 job')) workers = [threading.Thread(target=process_job, args=(q,)), threading.Thread(target=process_job, args=(q,))] for w in workers: w.setDaemon(True) w.start() # 當隊列取完為空時,不再阻塞,主進程結束,線程也隨著主進程一起結束 q.join() ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看