2010-12-08 4 views

Répondre

1

Si vous appelez print à partir de plusieurs threads, la sortie peut être entrelacée au gré du planificateur.

+0

C'est pire que ça - si vous appelez 'print' à partir de plusieurs threads, la mise en mémoire tampon non synchronisée dans la couche d'E/S de Python peut entraîner l'impression de la sortie plusieurs fois à partir d'autres threads. – ephemient

+0

Ahh, c'est pire que ce que j'aurais imaginé. –

+0

utiliser une file d'attente pour un seul fil d'impression –

1

La réponse est non, les threads peuvent s'interrompre. Cependant, vous pouvez utiliser des verrous pour éviter cela.

Prévenons fils d'interrompre chaque verrou autre sur les choses globales (en particulier ici l'écran de sortie) lorsqu'un thread veut de utiliser chose globale avec un verrou, il vérifie d'abord si le verrou est déverrouillé, sinon il attend jusqu'à ce qu'il soit , après cela, il verrouille la serrure, fait les choses qu'il veut faire avec le truc global, et enfin relâche le verrou. Cependant, n'utilisez pas seulement des variables d'indicateur et si des vérifications pour implémenter cela, les threads peuvent basculer entre l'instruction if et le verrouillage. Python implémente une classe de verrouillage, si je me souviens bien de son threading.lock. Notez également que vous pouvez rencontrer un blocage ou un blocage si vous n'utilisez pas correctement les verrous. Je n'ai pas beaucoup de temps maintenant donc je ne peux pas vraiment expliquer tout ça ici, mais vous pouvez google pour plus d'infos, je vais aussi vérifier si je peux partager des présentations de mon cours de l'année dernière à l'université, ils m'expliquent bon là-dedans.

Questions connexes