Python 时间计数器

0 投票
2 回答
14980 浏览
提问于 2025-04-17 14:29

我有一些数据是从外部来源过来的(在这个例子中是串口),大约每2.5秒就会收到一次。
我想每5分钟存储一次这些数据,而不是每2.5秒存一次。
我该怎么用Python来实现这个呢?
可能不能使用睡眠函数,因为那样会让脚本的其他部分停止运行。

2 个回答

1

只需使用来自 threadingTimer 类,像这样。

import time
from threading import Timer

def poll_port():
    print "Getting my data from port", time.time()

def main():
    print "Main:enter", time.time()
    while True:
        t = Timer(5, poll_port)
        t.start()
        t.join()
        print "after join:", time.time()

if __name__ == "__main__":
    main()

示例输出:

Main:enter 1359755186.87
Getting my data from port 1359755191.88
after join: 1359755191.88
Getting my data from port 1359755196.88
after join: 1359755196.88
Getting my data from port 1359755201.88
after join: 1359755201.88
Getting my data from port 1359755206.88
1

检查自上次保存以来经过了多少时间,对于每个新来的事件,保存后更新最后保存的时间戳:

import time
lastsave = 0
def SaveEvent(data):
    # do what you need to save it
    ...


# I'm assuming there's some sort of event loop that 
# detects new events and directs them to some HandleEvent function

def HandleEvent(data):
    global lastsave
    if time.time() - lastsave > 300: 
    # this is in seconds, so 5 minutes = 300 seconds
        lastsave = time.time()
        SaveEvent(data)

如果你的应用程序是多线程或多进程的,你还应该考虑在SaveEvent函数中实现一个锁,以避免同时进行多个保存操作。

撰写回答