Je débute avec les Thread et j'ai un souci avec la manipulation des threads et du module logging en même temps:
Pour mes test, j'ai défini une fonction toute simple qui affiche un nombre avec une boucle et je le logue en même temps dans un fichier
si je l'exécute bêtement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 import threading as t import logging def a(n): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', filename='./a.log', filemode='a') logger = logging.getLogger('alog') for i in range(n): print i logger.log(10,str(i))
pas de problème, à l'écran, j'ai bien l'impression des nombres de 1 à 100 ainsi que dans mon fichier a.log
Code : Sélectionner tout - Visualiser dans une fenêtre à part a(100)
par contre, si je l'éxecute à partir d'un thread:
A la première exécution (avec compilation), je n'ai aucune erreur mais ensuite (donc sans compilation), j'ai l'erreur suivante qui apparaît après un certains nombres d'itérations dans le for (7, pourquoi 7 ?) quand il veut logger.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 c = t.Thread(name=None,target=a,kwargs={'n':100}) c.start()
Dans mon fichier a.log, j'ai simplement les nombres de 0 à 6Traceback (most recent call last):
File "C:\Python24\Lib\logging\__init__.py", line 735, in emit
self.stream.write(fs % msg)
ValueError: I/O operation on closed file
Par contre, si à la fin de mon prog (juste après avoir lancé le c.start()), je rajoute:2005-10-10 15:05:37,765 DEBUG 0
2005-10-10 15:05:37,765 DEBUG 1
2005-10-10 15:05:37,765 DEBUG 2
2005-10-10 15:05:37,765 DEBUG 3
2005-10-10 15:05:37,765 DEBUG 4
2005-10-10 15:05:37,765 DEBUG 5
2005-10-10 15:05:37,765 DEBUG 6
je n'ai plus jamais d'erreur (mais c'était juste pour voir si ca pouvait venir que mon thread s'arrête alors qu'il n'a pas finit sa tâche)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 while c.isAlive(): continue
Avez-vous une idée de comment puis-je remédier à mon problème ?
Partager