线程函数响应中的延迟

农业

我正在尝试在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

线程的函数结果总是延迟?

来自分类Dev

延迟函数调用中的延迟函数调用

来自分类Dev

Android中的多线程循环和延迟

来自分类Dev

在线程组中添加延迟-JMeter

来自分类Dev

JavaScript函数中的延迟循环

来自分类Dev

PHP mail() 函数中的延迟

来自分类Dev

Pyomo中的时间延迟响应

来自分类Dev

反应原生FlatList中的响应延迟

来自分类Dev

在不同的线程中执行每个QTModbus响应

来自分类Dev

处理Android中HTTP连接中的响应是否延迟

来自分类Dev

如何在Rails中延迟Ajax中的响应

来自分类Dev

在单独的线程中创建 PDF 仍然使主线程无响应

来自分类Dev

在重复的jQuery / Ajax函数中设置延迟

来自分类Dev

延迟构造函数中的访问实例常量

来自分类Dev

C / C ++中的延迟函数调用

来自分类Dev

在C函数中延迟创建自动变量

来自分类Dev

延迟后在jQuery中运行函数

来自分类Dev

使用SetTimeout延迟JavaScript中的函数

来自分类Dev

在 Coffeescript + Jquery 文件中延迟函数调用

来自分类Dev

向量中的函数的线程调用

来自分类Dev

在递归函数中创建线程

来自分类Dev

Python在函数中创建线程

来自分类Dev

线程中的回调函数

来自分类Dev

Java线程中的函数Join()

来自分类Dev

线程构造函数中“ this”的用法

来自分类Dev

线程中的成员函数指针

来自分类Dev

线程中的简单函数调用

来自分类Dev

如何在Android中的非UI线程上执行延迟

来自分类Dev

getter中的线程安全延迟初始化