Regardez ce morceau de code:Python gil comportement étrange
from threading import Thread
import time
cpt = 0
def myfunction():
print("myfunction.start")
global cpt
for x in range(10):
cpt += 1
time.sleep(0.2)
print("cpt=%d" % (cpt))
print("myfunction.end")
thread1 = Thread(target=myfunction)
thread2 = Thread(target=myfunction)
thread1.start()
thread2.start()
Cette fonction est très basique qui lit/écriture d'une variable globale. Je cours 2 threads sur cette même fonction. J'ai lu que python n'est pas très efficace avec le multi-threading à cause de GIL, qui verrouille automatiquement les fonctions ou méthodes qui accèdent aux mêmes ressources. Donc, je pensais que python va d'abord exécuter thread1, puis thread2, mais je peux voir dans la sortie de la console que les 2 threads sont exécutés en parallèle. donc je ne comprends pas ce que gil est vraiment verrouillait ...
Merci
Le GIL n'a rien à voir avec "accéder aux mêmes ressources" . –
Les verrous GIL au niveau du code octet Python, pas les fonctions ou les méthodes. – cdarke