Maison > développement back-end > Tutoriel Python > Comment utiliser le verrouillage de thread Python (exemple d'analyse)

Comment utiliser le verrouillage de thread Python (exemple d'analyse)

乌拉乌拉~
Libérer: 2018-08-23 17:42:06
original
1806 Les gens l'ont consulté

Dans cet article, apprenons ce qu'est le verrouillage de thread Python. Découvrez les verrous de thread Python et le rôle que les verrous de thread peuvent jouer dans la programmation Python.

Verrouillage des threads (mutex lock Mutex)

Plusieurs threads peuvent être démarrés sous un même processus, et plusieurs threads partagent l'espace mémoire du processus parent, ce qui signifie que chacun Deux threads peuvent accéder aux mêmes données. À ce moment-là, si deux threads veulent modifier les mêmes données en même temps, que se passera-t-il ?

Utilisation des verrous :

Créer un verrou
mutex = threading.Lock()

Verrouillage
mutex.acquire([timeout ])

Release
mutex.release()

import time

import threading

def addNum():
    global num #在每个线程中都获取这个全局变量
    print('--get num:',num )
    time.sleep(1)
    num  -=1 #对此公共变量进行-1操作
num = 100  #设定一个共享变量
thread_list = []
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)
for t in thread_list: #等待所有线程执行完毕
    t.join()
    
print('final num:', num )
Copier après la connexion

Normalement parlant, le résultat de ce num devrait être 0, mais si vous l'exécutez plusieurs fois sur python 2.7, vous constaterez que le résultat final imprimé n'est pas toujours 0. Pourquoi le résultat est-il différent à chaque exécution ? Ha, c'est très simple. Supposons que vous ayez deux threads A et B. À ce stade, num doit être décrémenté de 1. Puisque les deux threads s'exécutent simultanément, il est très probable que les deux threads enlèveront num=100 à la fois. En même temps, cette variable initiale est transmise au CPU pour le calcul. Lorsque le thread A termine le calcul, le résultat est 99, mais à ce moment, le thread B termine le calcul et le résultat est également 99. Après les résultats du CPU les calculs des deux threads en même temps sont affectés à la variable num, les résultats sont tous deux 99. Ce qu'il faut faire? C'est très simple. Lorsque chaque thread veut modifier des données publiques, afin d'empêcher les autres de modifier les données avant d'avoir fini de les modifier, il peut ajouter un verrou aux données, afin que les autres threads doivent attendre lorsqu'ils veulent modifier les données. données Vous ne pourrez accéder à nouveau à ces données qu'après avoir terminé la modification et libéré le verrouillage.

Remarque : Ne pas exécuter sur 3.x Pour une raison quelconque, les résultats sur 3.x sont toujours corrects. Il se peut que le verrou soit automatiquement ajouté

C'est tout Pour tout le contenu décrit dans cet article, cet article présente principalement les connaissances pertinentes du

verrouillage mutex python J'espère que vous pourrez utiliser les informations pour comprendre le contenu ci-dessus. J'espère que ce que j'ai décrit dans cet article vous sera utile et vous facilitera l'apprentissage de Python.

Pour plus de connaissances connexes, veuillez visiter la colonne

Tutoriel Python du site Web php chinois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal