python 3.x 學習筆記16 (隊列queue 以及 multiprocessing模組)

來源:互聯網
上載者:User

標籤:管道   empty   ocs   nec   log   pipe   body   產生   設定   

1.隊列(queue)

用法:

import queueq = queue.Queue()    #先進先出模式q.put(1)                    #存放資料在q裡

 


作用: 1)解耦
     2)提高效率

class queue.Queue(maxsize=0)                        #先入先出
class queue.LifoQueue(maxsize=0)                  #後進先出
class queue.PriorityQueue(maxsize=0)             #儲存資料時可設定優先權的隊列

Queue.qsize()                                                    #   返回隊列的大小
Queue.empty()                                                   # 如果隊列為空白,返回True,反之False
Queue.full()                                                        #如果隊列滿了,返回True,反之
Queue.get([block[, timeout]])                              # 擷取隊列,timeout等待時間
Queue.get_nowait()                                             #相當Queue.get(False)
Queue.put(item)                                                    #寫入隊列,timeout等待時間( 非阻塞)
Queue.put_nowait(item)                                      # 相當Queue.put(item, False)
Queue.task_done()                                              #在完成一項工作之後,Queue.task_done()函數向任務已經完成的隊列發送一個訊號
Queue.join()                                                           #實際上意味著等到隊列為空白,再執行別的操作

 

2.python多線程不適合cpu密集操作型的任務,適合io操作密集型的任務

 

 

3.multiprocessing模組 

官方詳解:https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing

1).pipe(管道)                             

multiprocessing.Pipe()即管道模式,調用Pipe()返回管道的兩端的Connection。


2).manager
multiprocessing.manager()
用於多進程之間資訊的共用


3).Pool(進程池)
multiprocessing.Pool()
  1)進程池內部維護一個進程式列,當使用時,則去進程池中擷取一個進程,如果進程池序列中沒有可供使用的進進程,那麼程式就會等待,直到進程池中有可用進程為止。

  2)在windos上必須寫上if __name__==‘__main__‘:之後才產生進程池才不會出錯進程池中進程執行完畢後再關閉,如果注釋,那麼程式直接關閉。

  3)進程池兩個方法
    apply() 穿行
    apply_async() 並行
    註:pool.apply_async(func=Foo, args=(i,), callback=Bar)#callback回調Bar

 

6.if __name__==‘__main__‘:
_name__ 是當前模組名,當模組被直接運行時模組名為 __main__ 。這句話的意思就是,當模組被直接運行時,以下代碼塊將被運行,當模組是被匯入時,代碼塊不被運行。

python 3.x 學習筆記16 (隊列queue 以及 multiprocessing模組)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.