web-dev-qa-db-fra.com

Un équivalent à Java volatile in Python

Python a-t-il l'équivalent du concept Java volatile?)

Dans Java il y a un mot-clé volatile. Pour autant que je sache, lorsque nous utilisons volatile lors de la déclaration d'une variable, toute modification de la valeur de cette variable sera visible par tous les threads exécutés en même temps.

Je voulais savoir s'il y avait quelque chose de similaire en Python, de sorte que lorsque la valeur d'une variable est modifiée dans une fonction, sa valeur sera visible par tous les threads s'exécutant en même temps.

7
Pablo

Pour autant que je sache, lorsque nous utilisons volatile lors de la déclaration d'une variable, toute modification de la valeur de cette variable sera visible par tous les threads exécutés en même temps.

volatile est un peu plus nuancé que ça. volatile garantit que Java stocke et met à jour la valeur de la variable dans la mémoire principale. Sans volatile, la JVM est libre de stocker la la valeur dans le cache CPU à la place, qui a effet secondaire de mises à jour de la valeur étant invisible pour différents threads s'exécutant sur différents cœurs CPU (threads qui s'exécutent simultanément sur le même noyau serait voir la valeur).

Python ne fait jamais ça. Python stocke tous les objets sur un tas, dans la mémoire principale. De plus, en raison de la façon dont la boucle d'interpréteur Python utilise le verrouillage (le GIL), un seul thread à la fois exécutera activement Python. Il n'y a jamais de chance que différents threads exécutent une boucle d'interpréteur Python sur un CPU différent.

Vous n'avez donc pas besoin d'utiliser volatile en Python, il n'y a pas un tel concept et vous n'avez pas à vous en préoccuper.

15
Martijn Pieters