Ejecutar una función cada X minutos – Python

Estoy usando Python y PyGTK. Estoy interesado en ejecutar una función determinada, que obtiene datos de un puerto serie y los guarda, cada varios minutos.

Actualmente, estoy usando la función sleep () en la biblioteca de tiempos. Para poder hacer el procesamiento, tengo mi sistema configurado de esta manera:

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) 

Esta configuración me permite tener intervalos de 5 minutos entre la lectura de datos desde el puerto serie. Mi problema es que me gustaría poder hacer que mi función de lectura () se detenga cada 5 minutos y pueda hacer cosas todo el tiempo en lugar de usar la función time.sleep ().

¿Alguna sugerencia sobre cómo resolver este problema? Multihilo? Interrupciones? Por favor, tenga en cuenta que estoy usando python.

Gracias.

    No use dicho bucle con el modo de espera, bloqueará a gtk para que no procese ningún evento de IU, en su lugar use el temporizador de gtk, por ejemplo

     def my_timer(*args): return True# do ur work here, but not for long gtk.timeout_add(60*1000, my_timer) # call every min 

    Esto es exactamente como mi respuesta aquí

    Si el tiempo no es crítico para ser exacto a la décima de segundo, use

     glib.timeout_add_seconds(60, ..) 

    otra cosa como arriba.

    timeout_add_seconds permite al sistema alinear los tiempos de espera con otros eventos, a la larga, reduciendo las activaciones de la CPU (especialmente si el tiempo de espera se está reiniciando) y ahorra energía para el planeta (!)

    gtk.timeout_add parece estar en desuso, por lo que deberías usar

     def my_timer(*args): # Do your work here return True gobject.timeout_add( 60*1000, my_timer ) 

    tratar:

     import wx wx.CallLater(1000, my_timer)