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

1.隊列(queue)html

用法:python

import queue
q = queue.Queue()    #先進先出模式
q.put(1)                    #存放數據在q裏

 


做用: 1)解耦
     2)提升效率多線程

class queue.Queue(maxsize=0)                        #先入先出
class queue.LifoQueue(maxsize=0)                  #後進先出
class queue.PriorityQueue(maxsize=0)             #存儲數據時可設置優先級的隊列app

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()                                                           #實際上意味着等到隊列爲空,再執行別的操做async

 

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

 

 

3.multiprocessing模塊 spa

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

1).pipe(管道)                             code

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


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__ 。這句話的意思就是,當模塊被直接運行時,如下代碼塊將被運行,當模塊是被導入時,代碼塊不被運行。

相關文章
相關標籤/搜索