import time
def producer():
pro_list = []
for i in range(10000):
print "包子%s制作ing" %(i)
time.sleep(0.5)
pro_list.append("包子%s" %i)
return pro_list
def consumer(pro_list):
for index,stuffed_bun in enumerate(pro_list):
print "第%s個(gè)人,吃了第%s個(gè)包子" %(index,stuffed_bun)
pro_list = producer()
consumer(pro_list)
上面這種生產(chǎn)者與消費(fèi)者模型有一個(gè)嚴(yán)重的問題,就是效率極低,而且在“生產(chǎn)”的過程中,消費(fèi)者要等待,一直等待所有的包子都生產(chǎn)結(jié)束,消費(fèi)者才可以吃,這種模式效率低又不合理。
想要提高效率,就要對(duì)生產(chǎn)的過程,進(jìn)行修改,生產(chǎn)和消費(fèi)過程應(yīng)該是兩個(gè)獨(dú)立的個(gè)體,生產(chǎn)和消費(fèi)應(yīng)該做到“并發(fā)”(同時(shí))的操作。
import time
def consumer(name):
print '我是%s,準(zhǔn)備開始吃包子了'%(name)
while True:
stuffed_bun = yield
time.sleep(1)
print "%s很開心的把%s吃掉了" %(name,stuffed_bun)
def producer():
p1 = consumer("suhaozhi")
p2 = consumer("ayumi")
p1.next() #執(zhí)行next方法后,死循環(huán)開始
p2.next()
for i in range(10):
time.sleep(1)
p1.send("包子%s" %(i)) #通過send給yield賦值,yield在將值賦給stuffed_bun
p2.send("包子%s" %(i))
producer()
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com