1.隊列(queue) 用法: 作用: 1)解耦 2)提高效率 class queue.Queue(maxsize=0) #先入先出class queue.LifoQueue(maxsize=0) #後進先出 class queue.PriorityQueue(maxsize=0) #存儲數據時可設 ...
1.隊列(queue)
用法:
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) #存儲數據時可設置優先順序的隊列
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__ 。這句話的意思就是,當模塊被直接運行時,以下代碼塊將被運行,當模塊是被導入時,代碼塊不被運行。