1. 程式人生 > 實用技巧 >python進階——mysql初識

python進階——mysql初識

'''
1. 什麼是生產者消費者模型
    生產者:代指生產資料的任務
    消費者:代指處理資料的任務
    該模型的工作方式:
        生產生產資料傳遞消費者處理

        實現方式:
            生產者---->佇列<------消費者

2. 為何要用
    當程式中出現明細的兩類任務,一類負責生產資料,一類負責處理資料
    就可以引入生產者消費者模型來實現生產者與消費者的解耦合,平衡生產能力與消費能力,從提升效率

3. 如何用
'''

'''
import time,random
from multiprocessing import Process,Queue

def producer(name,food,q):
    for i in range(3):
        res='%s%s' %(food,i)
        time.sleep(random.randint(1,3)) #模擬生產資料的時間
        q.put(res)
        print('廚師[%s]生產了<%s>' %(name,res))

def consumer(name,q):
    while True:
        res=q.get()
        if res is None:break
        time.sleep(random.randint(1,3)) #模擬處理資料的時間
        print('吃貨[%s]吃了<%s>' %(name,res))

if __name__ == '__main__':
    q=Queue()
    # 生產者們
    p1=Process(target=producer,args=('小Egon','煎餅',q))
    p2=Process(target=producer,args=('中Egon','肉夾饃',q))
    p3=Process(target=producer,args=('大Egon','腰子湯',q))
    # 消費者們
    c1=Process(target=consumer,args=('alex',q))
    c2=Process(target=consumer,args=('java',q))

    p1.start()
    p2.start()
    p3.start()
    c1.start()
    c2.start()

    p1.join()
    p2.join()
    p3.join()
    q.put(None)
    q.put(None)
    print('主')
''' import time,random from multiprocessing import Process,JoinableQueue def producer(name,food,q): for i in range(3): res='%s%s' %(food,i) time.sleep(random.randint(1,3)) #模擬生產資料的時間 q.put(res) print('廚師[%s]生產了<%s>' %(name,res)) def consumer(name,q):
while True: res=q.get() time.sleep(random.randint(1,3)) #模擬處理資料的時間 print('吃貨[%s]吃了<%s>' %(name,res)) q.task_done() if __name__ == '__main__': q=JoinableQueue() # 生產者們 p1=Process(target=producer,args=('小Egon','涼皮',q)) p2=Process(target=producer,args=('
中Egon','生煎',q)) p3=Process(target=producer,args=('大Egon','胡辣湯',q)) # 消費者們 c1=Process(target=consumer,args=('tom',q)) c2=Process(target=consumer,args=('python',q)) c1.daemon=True c2.daemon=True p1.start() p2.start() p3.start() c1.start() c2.start() p1.join() p2.join() p3.join() q.join() # 主程序等q結束,即q內資料被取乾淨了 print('')