PYGTK à PYGI: équivalent gtk.timeout_add

9

J'ai converti du code Python pour utiliser PYGI mais je ne sais pas comment convertir cette ligne:

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

Pour être clair, comme je ne connais pas vraiment la différence entre PYGTK et PYGI, mon nouveau code utilise

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

comme indiqué ici https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Le code complet que j'essaie de convertir est ici http://pastebin.com/raw.php?i=aUtASRpy

Quel est l'équivalent de

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

à PYGI?

Je suppose également que PYGI est le moyen le plus moderne de faire un indicateur d'unité

Je suppose également qu'il est préférable que l'indicateur vérifie l'état de quelque chose plutôt que de dire à l'indicateur l'état (push vs pull). Est-il acceptable qu'un programme python vérifie quelque chose à chaque seconde?

Merci!

onBootQuestioner
la source

Réponses:

1

Il vaut mieux poser une question par ... euh ... question.

La bibliothèque standard de Python a un threadingmodule qui a une Timerclasse qui fait exactement ce dont vous avez besoin. Documentation .

En ce qui concerne push vs pull - il est certainement préférable que votre application reçoive une notification lorsque quelque chose se produit (push) au lieu de vérifier si quelque chose s'est produit chaque seconde (pull) - "sommes-nous encore là? Sommes-nous encore là? Sommes-nous là encore?. . "- car il permet à votre application de se mettre en veille et de ne rien faire tant qu'elle n'est pas notifiée, par opposition à la même vérification répétée toutes les secondes. Le fait est cependant que pour certains types d'activités, il peut être difficile d'obtenir une notification, cela dépend donc de la nature de votre application. Faire des vérifications trop souvent est également mauvais pour la durée de vie de la batterie et d'autres choses.

Sergey
la source
Merci, cela m'a amené à pirater ensemble ce pastebin.com/raw.php?i=0jLxZ994 avec la grande aide de stackoverflow.com/questions/9812344/… Mais, maintenant il est temps d'apprendre à faire une sorte d'auditeur depuis avec quoi Je pense que la majorité des "sondages" découvriront que rien n'a changé, mais c'est pour une autre fois. Merci!
onBootQuestioner
19

Juste pour être sûr que la méthode Gtk est également présente dans une réponse:

L'équivalent de

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

dans l'introspection gobject (PyGI) est:

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

Cependant, lors de la vérification régulière de quelque chose toutes les x secondes, vous devez utiliser

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Cela permet au Glib de regrouper les minuteries et donc d'économiser de l'énergie, ce qui est important pour les appareils mobiles. De la documentation :

Le regroupement des minuteries pour déclencher en même temps entraîne un comportement plus efficace en termes de puissance et de processeur, donc si votre minuteur est en multiples de secondes et que vous n'avez pas besoin du premier minuteur exactement dans une seconde à partir de maintenant, l'utilisation de glib.timeout_add_seconds ( ) est préférable à glib.timeout_add ().

xubuntix
la source
4
Cela semble bien mieux que d'utiliser le filetage. D'autant plus que le threading peut provoquer des bugs et des blocages étranges si vous ne savez pas vraiment ce que vous faites.
Timo