mou*_*che 12 python gtk pygtk timer
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
此设置允许我在从串行端口读取数据之间有5分钟的间隔.我的问题是,我希望能够让我的readserial()函数暂停每5分钟发生一次,并且能够一直做事而不是使用time.sleep()函数.
有关如何解决这个问题的任何建议?多线程?中断?请记住我正在使用python.
谢谢.
Anu*_*yal 23
不要在睡眠时使用这样的循环,它会阻止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
Run Code Online (Sandbox Code Playgroud)
u0b*_*6ae 10
这和我的回答完全一样
如果时间对于精确到十分之一秒并不重要,请使用
glib.timeout_add_seconds(60, ..)
Run Code Online (Sandbox Code Playgroud)
如上所述.
timeout_add_seconds允许系统将超时与其他事件对齐,从长远来看减少CPU唤醒(特别是如果超时重新启动)并为行星节省能量(!)
gtk.timeout_add 似乎已被弃用,因此您应该使用
def my_timer(*args):
# Do your work here
return True
gobject.timeout_add( 60*1000, my_timer )
Run Code Online (Sandbox Code Playgroud)