【问题标题】:What happens if there are timed events when Twisted's reactor is blocking?如果 Twisted 的反应堆阻塞时有定时事件会发生什么?
【发布时间】:2017-01-07 11:32:50
【问题描述】:

我是事件驱动编程范式的新手,正在阅读 Twisted。

在这个关于 Reactor 的问题中, How does Python's Twisted Reactor work?

 timeout = time_until_next_timed_event()
 events = wait_for_events(timeout)
 events += timed_events_until(now())

从逻辑上讲,不会有timeout = time_until_next_timed_event() 被计算为12 Hours 的情况,而event = wait_for_events(timeout) 只是等待12 Hours,因为没有发生外部触发,它只是错过了服务任何timed_events_until(now()) 事件,理想情况下它可以吗?这不是妥协吗?

我很确定我遗漏了什么,谁能从逻辑的角度澄清这一点?

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    如果下一个定时事件是从现在开始的 12 小时,那么根据定义,它将是 12 小时,直到 timed_events_until(now()) 返回任何事件。

    【讨论】:

    • 感谢您的回答!所以你的意思是在这个系统中没有任何内部(除了它正在监视外部的东西之外的任何东西)可以触发定时事件,因为它是单线程并且它正在做的唯一工作是等待外部输入?那么这一切都是有道理的。这些外部事件之一可能会导致定时事件,但这将作为 next 循环 的一部分进行处理,因此也可以。希望我的问题有意义。请让我知道你的想法。
    • 另一种询问方式是,在这样的系统中,您等待时不会发生任何定时事件 - 如果不是,为什么?是不是因为唯一能做任何事情的都是基于外部事件(通常是服务器由客户端驱动)。
    • 我们知道下一个定时事件何时发生(这就是“定时”的意思,它发生在特定时间)。所以这就是我们睡多久。你为什么不在早上的会议上睡觉呢?因为在你睡觉之前,你会查看第二天​​的日历,并把闹钟设置在适当的时间响起。我认为这比你想象的要简单:-)
    • 好的。在那个类比中,我的问题是在我睡觉时没有什么可以修改我的日历:-) 我假设这是不可能的,因为一切都发生在单线程控制中。在现实生活中,这一切都是可能的;)。让我们想象一下发生了对日历的修改,它必须唤醒你才能做到这一点。有你!感谢您的回答。
    • 对,在这个类比中,我们假设您是唯一可以修改日历的人。 (也许是你放在口袋里的那些旧纸。)因此,如果有人想更改会议时间,那么唯一的方法就是让他们给你打电话,叫你起床,告诉你新的会议时间,然后你修改你的日历。然后在你回去睡觉之前,调整你的闹钟。
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 2012-07-31
    • 2021-10-13
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多