Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程函数响应中的延迟_Python_Python 3.x_Multithreading_Events_Concurrency - Fatal编程技术网

Python 线程函数响应中的延迟

Python 线程函数响应中的延迟,python,python-3.x,multithreading,events,concurrency,Python,Python 3.x,Multithreading,Events,Concurrency,我试图在python中复制ES6事件行为,因此我编写了以下代码: 从线程导入线程 从时间上导入睡眠 班级活动: 定义初始化(自我,动作): 自我行动 self.flag=False self.\uuu watchFlag() def触发动作(自): self.flag=True def__监视标志(自身): 如果self.flag: 自我行动 self.flag=False 线程(target=self.\uuu watchFlag).start() def action(): 打印(“事件触发

我试图在python中复制ES6事件行为,因此我编写了以下代码:

从线程导入线程
从时间上导入睡眠
班级活动:
定义初始化(自我,动作):
自我行动
self.flag=False
self.\uuu watchFlag()
def触发动作(自):
self.flag=True
def__监视标志(自身):
如果self.flag:
自我行动
self.flag=False
线程(target=self.\uuu watchFlag).start()
def action():
打印(“事件触发操作”)
my_事件=事件(操作)
my_event.triggerAction()
除非我连续两次尝试触发动作,否则效果很好,即:

my_event.triggerAction()
my_event.triggerAction()
只有一个事件被触发,但如果我在每个触发器之间添加一个
睡眠(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
,这样您就没有足够的时间来启动上下文切换