J'ai ajouté un module à mopidy core qui utilise gobject.timeout_add() pour une fonction répétitive. Cela fonctionne correctement lors de l'exécution normale, cependant lors de l'exécution de tests, il apparaît que la fonction de gestionnaire n'est jamais appelée. Le module testé a une méthode qui démarre un processus normal qui émet des événements à peu près toutes les demi-secondes. Le test appelle la méthode, puis appelle time.sleep (2). Les événements de la fonction de temporisateur ne se produisent pas, et il n'y a pas non plus de débogage dans la fonction de temporisation. D'autres événements et la journalisation de débogage (en dehors de la fonction de minuterie) fonctionnent bien.gobject.timeout_add ne fonctionne pas dans les tests de nez
Que dois-je faire pour que gobject.timeout_add() fonctionne dans les tests de nez? Ou dois-je utiliser autre chose que time.sleep() dans le test pour permettre à l'autre code de s'exécuter? Il appelle gobject.threads_init() dans la configuration de test, y at-il autre chose que je dois faire?
OK, merci. Ce n'est pas gtk + (le doco que je regardais est [ici]) (http://www.pygtk.org/pygtk2reference/gobject-functions.html#function-gobject--timeout-add), c'est un module backend – teq0
Désolé, je ne voulais pas poster ça, je n'avais pas fini de taper ... Je l'ai d'abord écrit en utilisant un thread dédié, mais quelqu'un a suggéré d'utiliser timeout_add() à la place.J'ai ajouté des trucs pour initialiser la boucle principale, hasn ' Autant que je sache, time.sleep() dort tout le thread principal, ce qui explique pourquoi la fonction timeout n'est jamais appelée Comment les utilisateurs écrivent-ils des tests qui testent les actions effectuées avec timeout_add()? puis-je utiliser pour suspendre l'exécution du test sans arrêter le thread entier? – teq0
time.sleep() bloquera le thread dans lequel il a été appelé. La boucle principale ne génère pas un thread pour faire son stuff dedans-il le fait dans le thread vous l'appelez. Vous devez réellement * exécuter * la boucle principale. Une fois que votre timeout est exécuté, vous pouvez quitter la boucle principale (g_main_loop_quit, ou quel que soit son nom en python) et le contrôle retournera à votre code juste après l'endroit où vous avez appelé g_main_loop_run. – nemequ