PYGTK para PYGI: gtk.timeout_add equivalente

9

Eu converti algum código Python para usar o PYGI, mas não consigo descobrir como converter essa linha:

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Para limpar, já que eu realmente não sei a diferença entre PYGTK e PYGI, meu novo código usa

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

como mostrado aqui link

O código completo que estou tentando converter está aqui link

Qual é o equivalente de

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

em PYGI?

Eu também estou supondo que o PYGI é a maneira mais moderna de fazer um indicador de unidade

Eu também presumo que é melhor para o indicador verificar o estado de algo, em vez de algo dizer ao indicador o estado (push vs pull). Está tudo bem em ter um programa python verificando algo a cada segundo?

Obrigado!

    
por onBootQuestioner 14.12.2012 / 02:08

2 respostas

1

É melhor fazer uma pergunta por ... err ... pergunta.

A biblioteca padrão do Python possui threading module que possui uma Timer de classe que faz exatamente o que você precisa. Documentação .

Em relação a push vs pull - é definitivamente melhor quando seu aplicativo recebe uma notificação quando algo acontece (push) em vez de verificar se algo aconteceu a cada segundo (pull) - "estamos lá ainda? já chegamos lá? estamos lá ainda? .. "- porque permite que seu aplicativo apenas durma e não faça nada até que seja notificado, ao invés de fazer a mesma verificação repetida a cada segundo. No entanto, o problema é que, para alguns tipos de atividades, pode ser difícil obter uma notificação, portanto, isso depende da natureza do seu aplicativo. Fazer verificações com muita frequência também é ruim para a duração da bateria e outras coisas.

    
por Sergey 14.12.2012 / 03:28
19

Apenas para garantir que o caminho Gtk também esteja presente em uma resposta:

O equivalente a

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

na introspecção de objetos (PyGI) é:

from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)

No entanto, ao verificar algo regularmente a cada x segundos, você deve usar

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Isso permite que o Glib agrupe timers e, portanto, economize energia, o que é importante para dispositivos móveis. A partir da documentação :

  

O agrupamento de temporizadores para disparar ao mesmo tempo resulta em   poder e comportamento eficiente do CPU por isso, se o seu temporizador é em múltiplos de   segundos e você não precisa do primeiro temporizador exatamente um segundo de   agora, o uso de glib.timeout_add_seconds () é preferido   glib.timeout_add ().

    
por xubuntix 14.12.2012 / 09:04