线程函数响应中的延迟



我正试图在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,因此您没有足够的时间来启动上下文切换。

最新更新