每X分钟运行一个函数 - Python

12 投票
4 回答
11457 浏览
提问于 2025-04-15 12:31

我正在使用Python和PyGTK,想要每隔几分钟运行一个函数,这个函数从串口获取数据并保存。

目前,我在使用时间库里的sleep()函数。为了能进行处理,我把系统设置成这样:

import time
waittime = 300 # 5 minutes
while(1):
    time1 = time.time()
    readserial() # Read data from serial port
    processing() # Do stuff with serial data, including dumping it to a file
    time2 = time.time()
    processingtime = time2 - time1
    sleeptime = waittime - processingtime
    time.sleep(sleeptime)

这个设置让我每5分钟从串口读取一次数据。我的问题是,我希望readserial()这个函数能在每5分钟暂停其他正在进行的事情,而不是一直用time.sleep()函数。

有没有什么建议可以解决这个问题?多线程?中断?请记住,我是在用Python。

谢谢。

4 个回答

5

gtk.timeout_add这个函数好像已经不再推荐使用了,所以你应该用下面这个替代的方法:

def my_timer(*args):
    # Do your work here
    return True

gobject.timeout_add( 60*1000, my_timer )
9

这就跟我在这里的回答一样。

如果时间不需要精确到十分之一秒,可以使用

glib.timeout_add_seconds(60, ..)

其他的就和上面一样。

timeout_add_seconds 这个功能可以让系统把超时设置和其他事件对齐,从长远来看,这样可以减少CPU的唤醒次数(特别是当超时是重复发生的时候),还可以为地球省点能源(!)

23

不要用这种带有睡眠(sleep)的循环,因为这样会让gtk无法处理任何用户界面的事件。相反,应该使用gtk的定时器,比如:

def my_timer(*args):
    return True# do ur work here, but not for long

gtk.timeout_add(60*1000, my_timer) # call every min

撰写回答