Python时间计数器

时间:2013-02-01 21:33:53

标签: python python-2.7

我的数据大约每2.5秒从外部源(本例中为串行端口)传入 我想每隔5分钟(不是每2.5秒)存储(在mysql中)这些数据的样本 我将如何在python中实现这一点? 人们可能不会使用睡眠功能,因为这将停止脚本的其余部分。

2 个答案:

答案 0 :(得分: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函数中实现锁定,以避免并发保存。

答案 1 :(得分:1)

只需使用Timer中的threading类 - 类似。

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