【问题标题】:Delay in a threaded function response线程函数响应延迟
【发布时间】:2020-12-10 09:55:29
【问题描述】:

我正在尝试在 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),效果很好。所以我假设这个过程中的某个地方有延迟,有什么想法吗?

注意:请不要推荐 Python 中已经存在的任何事件库,我知道,这不是我的最终目标,谢谢。

【问题讨论】:

    标签: python python-3.x multithreading events concurrency


    【解决方案1】:

    如果您将代码更改为:

    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.
    

    所以在第一种情况下,您将标志设置为true立即,因此您没有给上下文切换足够的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多