用了Event依舊死鎖

2021-10-09 12:33:27 字數 1632 閱讀 1826

自學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 屬...