6
votes

L'impression de Python est-elle synchronisée?

L'impression de Python est-elle synchronisée? :)

entre threads.


4 commentaires

Imprimer est une déclaration (en <3.0). Synchronisé sur quoi?


Synchronisé comme dans Java?


Vous voulez que ce soit synchronisé? Certes, à un moment donné, la sortie est sérialisée. Je suppose que vous vous attendez à ce que l'ensemble de la sortie d'une déclaration d'impression soit tous ensemble.


L'apprentissage de la programmation n'est pas de trouver une réponse, mais d'apprendre à encadrer si bien que la réponse pourrait elle-même être très évidente.


4 Réponses :


14
votes

Python's Imprimer n'est même pas vaguement via Safe Safe . (Les mots de Bram Cohen, pas les miens.)


0 commentaires

4
votes

Si vous appelez Imprimer à partir de threads multiples, la sortie peut être entrelée à la caprice du planificateur.


2 commentaires

C'est pire que ça - si vous appelez Imprimer à partir de plusieurs threads, la mémoire tamponnage non synchronisée de la couche IO de Python peut provoquer une impression de sortie à plusieurs reprises à partir d'autres threads.


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



2
votes

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

Le verrou empêche les threads de s'interrompre sur des choses globales (spécifiquement ici, l'écran de sortie) Lorsqu'un thread veut utiliser une 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, faites-la de choses que vous voulez faire avec la chose globale, et enfin Relâchez la serrure.

Cependant, n'utilisez pas simplement des variables de drapeau et si les chèques pour la mettre en œuvre, les threads peuvent basculer entre l'instruction IF et le verrouillage. Python implémente une classe de verrouillage, si je me souviens bien de sa filetage.lock.

Aussi, notez que vous pouvez rencontrer une impasse ou un Livelock si vous n'utilisez pas correctement les serrures correctement. Je n'ai pas beaucoup de temps maintenant, je ne peux pas vraiment expliquer tout cela ici, mais vous pouvez également consulter Google que pour plus d'informations, je vérifierai également si je peux partager des présentations de mon dernier cours de l'université, ils expliquent cette jolie bon là-bas.


0 commentaires

1
votes

genre de solution de contournement ... il n'imprime pas synchronisé, mais il est monolithique et donc les fils ne s'écriront pas les uns sur les autres.

Avantages: ne nécessite pas de verrouillage et est donc plus rapide.

contre:

  • Il n'est pas synchronisé et il n'y a aucune garantie que les événements seront imprimés dans l'ordre survenu. En effet secondaire, si une exception apparaît, le texte de l'exception peut commencer avant que les dernières impressions ne soient sorties. Ils peuvent se présenter après le texte d'exception ou quelque part au milieu de la trace de la pile.
  • prend un peu plus de temps et de mémoire pour exécuter la boucle. xxx

0 commentaires