自學python執行緒程序遇到的乙個小白問題——用了event依舊死鎖
import random
import threading
import time
from queue import queue
items =
event = threading.event(
)class
consumer
(threading.thread)
:def
__init__
(self, items, event)
: threading.thread.__init__(self)
self.items = items
self.event = event
defrun(self)
:for i in
range(5
):time.sleep(2)
self.event.wait(
) item = self.items.pop(
)print
("consumer : %d 被消費 by %s %s"
%(item, self.name, time.ctime())
)class
producer
(threading.thread)
:def
__init__
(self, items, event)
: threading.thread.__init__(self)
self.items = items
self.event = event
defrun(self)
:global item
for i in
range(5
):time.sleep(2)
item = random.randint(0,
256)
print
("producer: %d 被生產 by %s %s"
%(item, self.name, time.ctime())
)#self.event.set()
#self.event.clear()
self.event.
set(
) self.event.clear(
)if __name__ ==
"__main__"
: t1 = consumer(items, event)
t2 = producer(items, event)
t1.start(
) t2.start(
) t1.join(
) t2.join(
)print
("結束 了"
)
一開始我是這麼寫的,這麼一看肯定是沒有問題,可是執行起來缺不盡人意,能不能成功全靠運氣,也改了不少地方,看是不是自己理解錯了,都沒有改善,最後我把消費者的時間延遲改為1,就再也沒有出過死鎖的現象了。用了一段時間遇到的坑,和大家分享一下。遇到了,也不至於花費太久時間。
第一次寫這玩意,不是很熟練,多多包涵,歡迎批評指正。
event詳細解說
event代表事件的狀態,例如觸發event物件的元素 滑鼠的位置及狀態 按下的鍵等等。event物件只在事件發生的過程中才有效。event的某些屬性只對特定的事件有意義。比如,fromelement 和 toelement 屬性只對 onmouseover 和 onmouseout 事件有意義。例...
事件物件event
1.e.client 相對於當前頁面 視窗,不是這個元素 可視區域的左頂點 document.onmousemove function e 2.e.screen 相對於計算機螢幕的左頂點 document.body.onclick function e 3.offset 事件觸發時滑鼠距離該元素左邊...
event屬性詳解
b 注意 window.event只對ie有效,而對ff是不相容的 b event代表事件的狀態,例如觸發event物件的元素 滑鼠的位置及狀態 按下的鍵等等。event物件只在事件發生的過程中才有效。event的某些屬性只對特定的事件有意義。比如,fromelement 和 toelement 屬...