我正在尝试在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()
仅触发了1个事件,但是如果我sleep(1/10)
在每个触发之间添加一个,效果很好。因此,我认为在此过程中会有些延迟,有什么想法吗?
注意: PLS不建议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
立即,因此您没有足够的时间启动上下文切换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句