Python連載38-協程、可迭代、迭代器、生產者消費者模型
阿新 • • 發佈:2019-09-19
一、生產者消費者模型
import multiprocessing from time import ctime def consumer(input_q): print("Into consumer:",ctime()) while True: #處理項 item = input_q.get() print("pull",item,"out of q")#此處替換為有用的工作 input_q.task_done()#發出訊號通知任務完成 print("Out of consumer:",ctime()) #此句未執行,因為q.join()收集到四個task_done()訊號後,主程序啟動 def producer(sequence,output_q): print("Into producer:",ctime()) for item in sequence: output_q.put(item) print("put",item,"into_q") print("Out of producer:",ctime()) #建立程序 if __name__ == "__main__": q=multiprocessing.JoinableQueue() #執行消費者程序 cons_p = multiprocessing.Process(target=consumer,args=(q,)) cons_p.daemon = True cons_p.start() #生產多個項,sequence代表要傳送給消費者的項序列 #在實踐中,這可能是生成器的輸出或通過一些其他方式生產出來的 sequence = [1,2,3,4] producer(sequence,q) #等待所有項被處理 q.join()
二、協程
1.協程參考資料:
http://python.jobble.com/86481/
http://python.jobble.com/87310/
https://segmentfault.com/a/1190000009781688
2.迭代器參考資料
可迭代(iterable):直接作用於for迴圈變數
迭代器(Iterator):不但可以作用於for迴圈,還可以被next呼叫
3.關係:list是一個典型的可迭代物件,但是不是一個迭代器,因為list不可以被next呼叫
4.判斷標準:通過isinstance來判斷某個變數是否是一個例項,判斷是否可以迭代
from collections import Iterable,Iterator l = [i for i in range(5)] #可迭代 print(isinstance(l,Iterable))#判斷是否可迭代 print(isinstance(l,Iterator))#判斷是否是一個迭代器 s_iter = iter(l)#將其轉換為可以迭代的和迭代器 print(isinstance(s_iter,Iterable))#判斷是否可迭代 print(isinstance(s_iter,Iterator))#判斷是否是一個迭代器
三、原始碼
d26_2_consumer_and_producer_model.py
d27_1_iterable_and_iterator_and_their_transform.py
https://github.com/ruigege66/Python_learning/blob/master/d26_2_consumer_and_producer_model.py
https://github.com/ruigege66/Python_learning/blob/master/d27_1_iterable_and_iterator_and_their_transform.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.部落格園:https://www.cnblogs.com/ruigege0000/
4.歡迎關注微信公眾號:傅立葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大資料學習資料
&n