致电' bar'一次,在&foo foo'在特定时间内被多次调用

时间:2017-09-08 07:47:49

标签: python python-2.7

假设您有一个事件驱动程序,它监视服务器上所有变量的值更改。每次监控更改时,都会调用foo

def foo(self, var_name, new_val):
    print var_name, " has new value: ", new_val

调用foo后,我想致电bar

def bar(self):
    print "Hello world!"

但是,如果多个变量在短时间内更改其值,例如100 ms,bar只应调用一次。

为了澄清,假设我们有变量abcd。这是两个期望的输出......

a在100毫秒内更改值。

a has new value: 4
Hello world!

所有变量在100毫秒内改变值。

a has new value: 4
b has new value: 4
c has new value: 4
d has new value: 4
Hello world!

如何实现这一目标?非常感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

在您的事件循环中,如果调用INTERVAL,您必须跟踪长度为bar的时间间隔(例如100毫秒)并在每个间隔结束时调用foo在那段时间里。由于在监视更改时调用了foo,因此如果在该时间间隔内执行了更改,则可以简化调用bar的条件。

import time

INTERVAL = 0.1      # 100 ms
previous_call_time = time.time()
value_changed_in_interval = False

# Event loop
while True:
    if time.time() - previous_call_time >= INTERVAL:
        # Time to call bar
        previous_call_time = time.time()

        if value_changed_in_interval:
            bar()

        # Reset, since we have started a new interval
        value_changed_in_interval = False

    # Check for changes and send events
    # If a value was changed, set value_changed_in_interval to True