假设您有一个事件驱动程序,它监视服务器上所有变量的值更改。每次监控更改时,都会调用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
只应调用一次。
为了澄清,假设我们有变量a
,b
,c
和d
。这是两个期望的输出......
仅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!
如何实现这一目标?非常感谢所有帮助!
答案 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