import threading,time
zhenglong= #共享資料的蒸籠
#建立兩把鎖 一把蒸饅頭的鎖 由夥伕掌管
#另外一把吃饅頭的鎖 由吃貨掌管
zheng_lock=threading.lock()
zheng_cond=threading.condition(lock=zheng_lock)
chi_lock=threading.lock()
chi_cond=threading.condition(lock=chi_lock)
class
huofu
(threading.thread):
def__init__
(self,name):
threading.thread.__init__(self)
self.setname(name)
defrun(self):
while
true:
chi_cond.acquire()#被喚醒
if len(zhenglong)==0:
#開始正包子
for i in range(1,11):
time.sleep(0.1)
print('正在蒸第個包子'.format(i))
print('包子蒸完了 喚醒吃貨們開始吃包子...')
chi_cond.notify_all()
chi_cond.release()#喚醒了夥伕 他就釋放
#夥伕進入休眠
zheng_cond.acquire()
zheng_cond.wait()
zheng_cond.release()
class
chihuo
(threading.thread):
def__init__
(self,name):
threading.thread.__init__(self)
self.setname(name)
defrun(self):
while
true:
chi_cond.acquire()#同乙個時刻只有乙個吃貨在獲取吃包子的資源
global zhenglong
if len(zhenglong)==0:
#開始呼喚夥伕 只叫一次 蒸包子 吃貨們開始休眠
zheng_cond.acquire()#鎖定叫醒夥伕的執行緒
zheng_cond.notify()#喚醒
zheng_cond.release()#釋放
chi_cond.wait()#吃貨休眠
else:
baozi=zhenglong.pop()
print('吃了第個包子 剩餘個包子'.format(self.getname(),baozi,len(zhenglong)))
time.sleep(0.1)
chi_cond.release()
w=huofu('夥伕')
xiaogang=chihuo('小剛')
xiaoming=chihuo('小明')
xiaohong=chihuo('小紅')
w.start()
xiaogang.start()
xiaoming.start()
xiaohong.start()
結果為
正在蒸第1個包子
正在蒸第2個包子
正在蒸第3個包子
正在蒸第4個包子
正在蒸第5個包子
正在蒸第6個包子
正在蒸第7個包子
正在蒸第8個包子
正在蒸第9個包子
正在蒸第10個包子
包子蒸完了 喚醒吃貨們開始吃包子...
小剛吃了第10個包子 剩餘9個包子
小明吃了第9個包子 剩餘8個包子
小明吃了第8個包子 剩餘7個包子
小明吃了第7個包子 剩餘6個包子
小明吃了第6個包子 剩餘5個包子
小剛吃了第5個包子 剩餘4個包子
小剛吃了第4個包子 剩餘3個包子
小剛吃了第3個包子 剩餘2個包子
小剛吃了第2個包子 剩餘1個包子
小剛吃了第1個包子 剩餘0個包子
正在蒸第1個包子
正在蒸第2個包子
正在蒸第3個包子
正在蒸第4個包子
正在蒸第5個包子
正在蒸第6個包子
正在蒸第7個包子
正在蒸第8個包子
正在蒸第9個包子
正在蒸第10個包子
包子蒸完了 喚醒吃貨們開始吃包子...
小紅吃了第10個包子 剩餘9個包子
小剛吃了第9個包子 剩餘8個包子
小明吃了第8個包子 剩餘7個包子
小明吃了第7個包子 剩餘6個包子
小明吃了第6個包子 剩餘5個包子
小明吃了第5個包子 剩餘4個包子
小明吃了第4個包子 剩餘3個包子
小剛吃了第3個包子 剩餘2個包子
小剛吃了第2個包子 剩餘1個包子
小剛吃了第1個包子 剩餘0個包子
正在蒸第1個包子
正在蒸第2個包子
正在蒸第3個包子
正在蒸第4個包子
正在蒸第5個包子
正在蒸第6個包子
正在蒸第7個包子
正在蒸第8個包子
正在蒸第9個包子
正在蒸第10個包子
包子蒸完了 喚醒吃貨們開始吃包子...
關於非同步和多執行緒的關係
個人的理解是這樣的 1.非同步通訊的意思是,當a傳送完訊息之後,不等待b的回應,繼續執行之後的程式.在將來的某個時刻,a再來檢查是否收到b的回應。非同步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成後再工作。2.多執行緒是程式設計的邏輯層概念,它是程序中併發執行的一段 多執...
關於python的多執行緒問題
在網上看到了好多關於python的thread的問題,關於多執行緒的爬蟲,我發現網上一些論壇的 實際上是單執行緒的,而我也是剛剛開始搞多執行緒,這是我的理解,請各位高手多多指教,前面是論壇 後面是我自己寫的 新手,還請指點一下,一起進步 論壇 自己研究了一下,大體是這樣 encoding utf 8...
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...