我正试图在python中复制ES6事件行为,因此我编写了以下代码:
from threading import Thread
from time import sleep
class Event:
def __init__(self, action):
self.action= action
self.flag = False
self.__watchFlag()
def triggerAction(self):
self.flag = True
def __watchFlag(self):
if self.flag:
self.action()
self.flag = False
Thread(target=self.__watchFlag).start()
def action():
print("Event triggered action.")
my_event = Event(action)
my_event.triggerAction()
这很好除了当我尝试连续两次触发动作时,即:
my_event.triggerAction()
my_event.triggerAction()
只有一个事件被触发,但如果我在每个触发之间添加一个sleep(1/10)
,效果会很好。所以我假设这个过程中有延迟,有什么想法吗?
注意:请不要建议PYTHON中已经存在任何事件库,我知道他们,这不是我的最终目标,THX。
如果您将代码更改为:
def triggerAction(self):
print("setting to true")
self.flag = True
当你有:
my_event.triggerAction()
my_event.triggerAction()
您将得到以下输出:
setting to true
setting to true
Event triggered action.
但如果你有:
my_event.triggerAction()
sleep(1/10)
my_event.triggerAction()
你得到了:
setting to true
Event triggered action.
setting to true
Event triggered action.
因此,在第一种情况下,您立即将flag设置为true
,因此您没有足够的时间来启动上下文切换。