標籤:管道 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模組)