Lorsque Python ne s'arrête jamais ?

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Claveau - MVP
Le #23109841
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
William Dode
Le #23109971
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
Pierre Maurette
Le #23110171
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):

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
Laurent Pointal
Le #23111861
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.
BertrandB
Le #23136361
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
stiffphare Hors ligne
Le #23690631
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
Publicité
Poster une réponse
Anonyme