Pergunta

Estou usando Python e Pygtk. Estou interessado em executar uma determinada função, que obtém dados de uma porta serial e o salva, a cada vários minutos.

Atualmente, estou usando a função Sleep () na biblioteca do tempo. Para poder fazer processamento, tenho meu sistema configurado assim:

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)

Essa configuração me permite ter intervalos de 5 minutos entre a leitura dos dados da porta serial. Meu problema é que eu gostaria de ter minha função readSerial () pausar o que estiver acontecendo a cada 5 minutos e fazer as coisas o tempo todo, em vez de usar a função Time.Sleep ().

Alguma sugestão sobre como resolver esse problema? Multithreading? Interrompe? Lembre -se de que estou usando o Python.

Obrigado.

Foi útil?

Solução

Não use esse loop com o sono, ele impedirá o GTK de processar quaisquer eventos da interface do usuário; em vez disso, use o timer GTK, por exemplo,

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

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

Outras dicas

Isso é exatamente como minha resposta aqui

Se o tempo não for crítico para ser exato para o décimo de segundo, use

glib.timeout_add_seconds(60, ..)

else como acima.

timeout_add_seconds Permite que o sistema alinhe os tempo limite a outros eventos, a longo prazo, reduzindo os despertadores da CPU (especialmente se o tempo limite estiver reocrendo) e Economize energia para o planeta(!)

gtk.timeout_add parece estar depreciado, então você deve usar

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

gobject.timeout_add( 60*1000, my_timer )

tentar:

import wx
wx.CallLater(1000, my_timer)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top