Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lorsque Python ne s'arrête jamais ?

6 réponses
Avatar
Michel Claveau - MVP
Bonjour !

J'ai un problème curieux, avec certains scripts, assez "lourds".

Si je lance un de ces scripts, Python ne s'arrête jamais. Mais pas dans
tous les cas.

Lorsque je dis "ne s'arrête jamais", je veux dire que, à la fin du script,
la fenêtre reste ouverte, le processus reste en place. Avec pythonw, le
processus reste en place (pas de fenêtre).
Si j'ajoute un sys.exit(), aucune erreur signalée, mais çe ne termine
pas pour autant.

J'ai testé avec Python 2.6 et Python 2.7, sur 14 machines, sous windows
2000, XP, Vista et 7. En 32 bits et 64 bits. J'ai le problème avec 10 de
ces ordinateurs.
Le problème ne se produit jamais sous 2000 ou XP. Il se produit sur
une machine sous Vista (sur deux), et sur 7 (sur 9) machines sous
Windows 7 (32 et 64 bits).

Quand ça se produit sur un ordinateur, c'est systématique (reproductible).

J'ai essayé de détruire (del) tous les objets présents. Sans amélioration.

En testant try: sys.exit() on tombe effectivement en except, mais
sans traceback, ni message.

Cependant, dans tout ça, je n'ai aucun problème de fonctionnement de
mes scripts sous Python. Tout marche bien (sauf que ça ne finit pas).

J'ai bien fini par trouver un moyen tordu de détruire le processus,
avec un taskkill appelé par le script lui-même, mais ce n'est pas joli
joli...

Alors, si quelqu'un avait une idée pour forcer la (bonne) fin, j'aimerais
bien la connaitre.

Merci d'avance.
--
Michel Claveau

6 réponses

Avatar
Michel Claveau - MVP
Re !

Quelques autres infos.

J'ai voulu "forcer" le traceback. Cela donne :
try:
sys.exit()
except:
pass
typ,val,tb=sys.exc_info()
print tb
print sys.excepthook(typ,val,tb)

et le résultat :
<traceback object at 0x022BE7D8>
Traceback (most recent call last):
File "j9.py", line 116, in <module>
sys.exit()
SystemExit

Sibyllin, non ?


J'ai aussi tenté python.exe -d ça donne... rien

Dernier test : lancer python.exe en interactif, et "importer" mon
script. Alors, à la fin, ça rend bien la main à Python, on peut
tout faire. Mais, en voulant quitter Python, rien ne se passe. Aussi
bien avec quit() qu'avec Ctrl-Z


Bref, pas de progrès...


@+
--
Michel Claveau
Avatar
William Dode
On 10-02-2011, Michel Claveau - MVP wrote:
Bonjour !

J'ai un problème curieux, avec certains scripts, assez "lourds".

Si je lance un de ces scripts, Python ne s'arrête jamais. Mais pas dans
tous les cas.



Tu dois lancer un process ou un thread à moment donné et qui boucle...

--
William Dodé - http://flibuste.net
Informaticien Indépendant
Avatar
Pierre Maurette
Michel Claveau - MVP, le 10/02/2011 a écrit :
Re !

Quelques autres infos.

J'ai voulu "forcer" le traceback. Cela donne :
try:
sys.exit()
except:
pass
typ,val,tb=sys.exc_info()
print tb
print sys.excepthook(typ,val,tb)

et le résultat :
<traceback object at 0x022BE7D8>
Traceback (most recent call last):
File "j9.py", line 116, in <module>
sys.exit()
SystemExit

Sibyllin, non ?



Je crois que c'est simplement normal, sys.exit() lance une exception
SystemExit. Chercher ce mot là par exemple (ou dans votre copie de la
doc):
<URL: http://docs.python.org/library/exceptions.html>

Pour le reste je ne peux vous aider. J'ai parfois sous 7 des
interprêteurs qui tournent en secret, mais il me semble que j'avais
déjà ça sous XP. Je mettais ça sur le compte du fait que les scripts
étaient foireux, ou d'Eclipse.


--
Pierre Maurette
Avatar
Laurent Pointal
Michel Claveau - MVP wrote:

Bonjour !

J'ai un problème curieux, avec certains scripts, assez "lourds".

Si je lance un de ces scripts, Python ne s'arrête jamais. Mais pas dans
tous les cas.

Lorsque je dis "ne s'arrête jamais", je veux dire que, à la fin du script,
la fenêtre reste ouverte, le processus reste en place. Avec pythonw, le
processus reste en place (pas de fenêtre).
Si j'ajoute un sys.exit(), aucune erreur signalée, mais çe ne termine
pas pour autant.

J'ai testé avec Python 2.6 et Python 2.7, sur 14 machines, sous windows
2000, XP, Vista et 7. En 32 bits et 64 bits. J'ai le problème avec 10 de
ces ordinateurs.
Le problème ne se produit jamais sous 2000 ou XP. Il se produit sur
une machine sous Vista (sur deux), et sur 7 (sur 9) machines sous
Windows 7 (32 et 64 bits).

Quand ça se produit sur un ordinateur, c'est systématique (reproductible).

J'ai essayé de détruire (del) tous les objets présents. Sans amélioration.

En testant try: sys.exit() on tombe effectivement en except, mais
sans traceback, ni message.

Cependant, dans tout ça, je n'ai aucun problème de fonctionnement de
mes scripts sous Python. Tout marche bien (sauf que ça ne finit pas).

J'ai bien fini par trouver un moyen tordu de détruire le processus,
avec un taskkill appelé par le script lui-même, mais ce n'est pas joli
joli...

Alors, si quelqu'un avait une idée pour forcer la (bonne) fin, j'aimerais
bien la connaitre.



As-tu des threads qui ne seraient pas terminées quelque part (avec le daemon
flag positionné de telle façon que Python attend qu'elles se finissent) ?


Merci d'avance.
Avatar
BertrandB
Le 10/02/2011 22:55, Laurent Pointal a écrit :
Michel Claveau - MVP wrote:



As-tu des threads qui ne seraient pas terminées quelque part (avec le daemon
flag positionné de telle façon que Python attend qu'elles se finissent) ?



Le problème n'est peut être pas python mais dans un fils d'un fils d'un
fils ....
compte tenu des plateforme 200, XP il n'y a pas vraiment de protection
système (quoique ...)
Vista seven l'acès à certaines ressources sont strictement réservées aux
profil administrateur ....

essayer de lancer le script en tant qu'admin et/ou regarder si le python
qui dort à des fils
Avatar
stiffphare
Michel Claveau - MVP a écrit le 10/02/2011 à 13h09 :
Bonjour !

J'ai un problème curieux, avec certains scripts, assez
"lourds".

Si je lance un de ces scripts, Python ne s'arrête jamais. Mais pas dans
tous les cas.

Lorsque je dis "ne s'arrête jamais", je veux dire que, à
la fin du script,
la fenêtre reste ouverte, le processus reste en place. Avec pythonw, le
processus reste en place (pas de fenêtre).
Si j'ajoute un sys.exit(), aucune erreur signalée, mais çe ne
termine
pas pour autant.

J'ai testé avec Python 2.6 et Python 2.7, sur 14 machines, sous windows

2000, XP, Vista et 7. En 32 bits et 64 bits. J'ai le problème avec 10
de
ces ordinateurs.
Le problème ne se produit jamais sous 2000 ou XP. Il se produit sur
une machine sous Vista (sur deux), et sur 7 (sur 9) machines sous
Windows 7 (32 et 64 bits).

Quand ça se produit sur un ordinateur, c'est systématique
(reproductible).

J'ai essayé de détruire (del) tous les objets présents.
Sans amélioration.

En testant try: sys.exit() on tombe effectivement en except, mais
sans traceback, ni message.

Cependant, dans tout ça, je n'ai aucun problème de fonctionnement
de
mes scripts sous Python. Tout marche bien (sauf que ça ne finit pas).

J'ai bien fini par trouver un moyen tordu de détruire le processus,
avec un taskkill appelé par le script lui-même, mais ce n'est pas
joli
joli...

Alors, si quelqu'un avait une idée pour forcer la (bonne) fin,
j'aimerais
bien la connaitre.

Merci d'avance.
--
Michel Claveau


j'ai connu 3 jours de galère avec ce problème.
Finalement le script suivant est passé

try:
for arg in sys.argv: print arg
sys.exit(arg)
except SystemExit: os._exit(0)


bon courage