Bonjour
J'ai actuellement un programme qui fonctione a merveille, à l'exception qu'après environ une journée a une journée et demi, quand je le récupère, l'ordinateur est inutilisable, beaucoup trop lent, cela me prend facile 1 a 2 minutes juste pour fermer python et valider l'arret du programme tellement il est lent
une fois relancé il repars sans problème, si je reviens le voir 4-5 heures après, toujorus pas de problèmes, parfois meme le lendemain matin ca passe toujours, mais je suis tout de meme obligé de le fermer et le relancer régulièrement (2-3 jours) (en revanche meme si le pc est très lent, il continue bien d'executer le programme)
Dans ce code il y a une fonction en boucle (exemple de code plus bas)
Et je me demandais si c'est cette boucle infinie qui fait que le pc tourne au ralenti après un certain temps
pourtant il fait 5 secondes de pause par cycle
d'ou le fait que je me demande, est ce que lors des pauses : sleep(5) l'ordinateur est reelement en train de "ne rien faire" et "attendre" ou bien il considère que attendre est une tache (dans ce cas il ne s'arreterai jamais de tourner et ca pourrait expliquer pourquoi au bout d'un moment il en a marre)
J'ai même ralenti ses cycles d'action la nuit avec des pauses de 60 secondes au lieu de 5 secondes pour que le lundi matin il soit frais et disponible (60 secondes d'attente pour une action dans la boucle d'envitron 2 secondes donc largement au repros proportionellement), mais il est toujours aussi lent a la reprise, et je suis obligé de le fermer et de le relancer tout de même.
Et ducoup comment faire pour qu'il tourne toujours aussi fluidement que dans les 10-15 premières heures?
J'ai essayé de passer par PyQt et QTimer pour lancer l'action avec un timer au lieu d'une boucle et de pauses dans la boucle, mais tout les exemples que j'ai vu semblent bien au dessus de mes compétences (pas de code simple en 4-5 lignes, toujours des créations de classes, avec des structures et des arguments qui ne me parlent absolument pas, un niveau au dessus du mien qui ne suis absolument pas programmeur de formation)
sinon j'ai essayé avec gobject dont timeout_add(1000,maFonction), mais je me retrouve avec un message : 'module' has no attribute timeout_add ou un message du genre (peut etre parce que je suis sous python3, beaucoup beaucoup d'exemples de codes sont sous python2.7 mais rarement python3) ducoup gobject n'a jamais voulu marcher pour moi quand j'utilise timeout_add()
Mais au final je ne suis même pas sur que passer par un autolancement toutes les x secondes plutot qu'une boucle en pause pendant x secondes, corrigerait ce problème
Exemple court :
je précise que le timer dans la fenetre Tk c'est parce que dans ma fenetre il y a des boutons et des zones de texte, et que sans ce timer, une fois le programme lancé je ne pouvais pas agir sur ma fenetre (cliquer sur les boutons ou ecrire dans les zones)Code:def lancerProg(): i=0 while i==0: %% faire des trucs, (entre autre aller chercher une donnée sur internet) %% ouvrir un fichier texte %% ecrire la donnée récuperée, dans le fichier texte %% fermer le fichier texte if nuit=T: sleep(60) else: sleep(5) fen=Tk() t=Timer(1,lancerProg) t.start() fen.mainloop()
Ducoup cettre structure fait exactement ce que je souhaite mais au bout d'une journée (parfois un peu plus) l'ordinateur et super long et agrandir le fenetre python, ou meme deplacer des elements a l'écran, cliquer sur "fermer" o ecrire dans ma fenetre Tk... prend beaucoup trop de temps alors que les 10 premières heures (plus ou moins) c'est nickel, fluide, aucun souci ....
Si nécessaire, je suis sous ubuntu16 et j'utilise python3, mais je pense pas que ca change quoi que ce soit
-----