2010-05-07 6 views
2

J'ai un script python qui crée et démarre 3 threads, puis passe à une boucle KeyboardInterrupt-catching, pour envoyer le signal d'arrêt des threads lorsque ctrl + c est pressé. La méthode run des threads a un niveau d'essai supérieur, sauf qu'il enregistre toutes les exceptions, et que le code de niveau supérieur qui crée les threads est inclus dans try, sauf pour consigner chaque exception.Un script python multithread meurt en silence - comment déboguer

Mais le script meurt juste au hasard, parfois après un jour, parfois après une heure, sans aucune exception.

Ça me rend fou, parce que je n'ai pas d'autres idées pour déboguer ça.

Des idées les gars?

Edit: Comme Luper a suggéré un regard sur syslog en effet révélé

python[27737]: segfault at 0 ip 0808e1d3 sp b662c5e0 error 4 in python2.5[8048000+fb000] 

encore aucune idée de comment aller d'ici.

En ce qui concerne le code, il ne marche pas faire quoi que ce soit de fantaisie, une analyse syntaxique de fichiers et la copie entre les répertoires, et appeler quelques executables via os.system

+0

Pourriez-vous poster un extrait d'échantillon? – codeape

+0

Regardez dans syslog pour segfaults et tel? –

Répondre

1

Un python en segfault est habituellement causée par un bogue dans un module écrit en C. Il n'y a rien que l'interprète puisse faire. Une recherche rapide a révélé que les problèmes communs qui provoquent un segfault sont 1) mauvaise mémoire (mais vous devriez voir plus segfaults - exécuter memcheck d'un CD vivant si vous le suspectez), 2) installation corrompue (essayez de réinstaller python et paquets, re-télécharger tout) et 3) bugs (duh). Essayez si c'est 1) ou 2) d'abord, puis pour voir où le processus s'arrête, vous pouvez utiliser strace pour enregistrer tous les appels système. Cela peut vous donner une autre idée de ce qui se passe (le fichier de sortie peut grossir):

strace -f python my_script.py > strace.out 2>&1 
Questions connexes