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

2024-04-26 06:20:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用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。

谢谢。


Tags: 数据端口函数datatime时间serialsleep
3条回答

不要在sleep中使用这样的循环,它将阻止gtk处理任何UI事件,而是使用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

这和my answer here一模一样

如果时间不是精确到十分之一秒的关键,请使用

glib.timeout_add_seconds(60, ..)

其他如上文所述。

timeout_add_seconds允许系统将超时与其他事件对齐,从长远来看可以减少CPU唤醒(特别是在超时重新发生的情况下)和save energy for the planet(!)

gtk.timeout_add似乎已弃用,因此应使用

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

gobject.timeout_add( 60*1000, my_timer )

相关问题 更多 >