Les étiquettes peuvent ne pas être exactes puisque je ne suis pas sûr où le problème est.comportement étrange en python
J'ai un module où je suis en train de lire des données d'une socket, et écrire les résultats dans un fichier (ajouter) Il ressemble à quelque chose comme ça, (seulement les parties pertinentes inclus)
if __name__ == "__main__":
<some init code>
for line in file:
t = Thread(target=foo, args=(line,))
t.start()
while nThreads > 0:
time.sleep(1)
ici sont les autres modules,
def foo(text):
global countLock, nThreads
countLock.acquire()
nThreads += 1
countLock.release()
"""connect to socket, send data, read response"""
writeResults(text, result)
countLock.acquire()
nThreads -= 1
countLock.release()
def writeResults(text, result):
"""acquire file lock"""
"""append to file"""
"""release file lock"""
Maintenant, voici le problème. Au départ, j'ai eu une faute de frappe dans la fonction 'foo', où je passais la variable 'line' à writeResults au lieu de 'text'. 'line' n'est pas défini dans la fonction foo, il est défini dans le bloc principal, donc j'aurais dû voir une erreur, mais à la place ça fonctionnait bien, sauf que les données étaient ajoutées plusieurs fois au fichier, au lieu d'être écrites juste une fois, ce qui est le comportement requis, ce que j'ai eu quand j'ai corrigé la faute de frappe.
Ma question est,
1) Pourquoi ai-je pas une erreur?
2) Pourquoi la fonction writeResults a-t-elle été appelée plusieurs fois?
Merci pour votre réponse. Non, le nombre de répétitions (et j'aurais dû le mentionner auparavant) était de 4 ou 5 la plupart du temps. – fsm