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êtementCode:
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.logCode: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:
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 à 6Citation:
Traceback (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:Citation:
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:
1
2 while c.isAlive(): continue
Avez-vous une idée de comment puis-je remédier à mon problème ?