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