Qu'est-ce que la synchronisation multithread Python ? Qu'est-ce qu'un frein-fil ?

乌拉乌拉~
Libérer: 2018-08-21 19:44:37
original
1981 Les gens l'ont consulté

Pour ceux qui sont exposés au langage de programmation Python pour la première fois, ils connaissent peu la synchronisation des threads Python lorsqu'ils ont commencé à apprendre la programmation Python. Dans cet article, nous en apprendrons davantageMulti-threading Python<.>synchronisation et verrouillage multi-thread python cet aspect de la connaissance.

Synchronisation des threads

Si plusieurs threads modifient conjointement certaines données, des résultats imprévisibles peuvent se produire. Afin de garantir l'exactitude des données, plusieurs threads doivent être modifiés. . Les fils de discussion sont synchronisés.

Utilisez Lock et Rlock de l'objet Thread pour obtenir une synchronisation simple des threads. Les deux objets ont une méthode d'acquisition et une méthode de libération Pour les données qui doivent être exploitées par un seul thread à la fois, son opération peut être placée entre l'acquisition. et les méthodes de libération. Comme suit :

L'avantage du multi-threading est qu'il peut exécuter plusieurs tâches en même temps (du moins c'est ce que l'on ressent). Mais lorsque les threads doivent partager des données, des problèmes de désynchronisation des données peuvent survenir.

Considérez cette situation : tous les éléments d'une liste sont à 0, le fil "set" change tous les éléments à 1 de l'arrière vers l'avant, et le fil "print" se charge de lire la liste d'avant en arrière et impression.

Ensuite, peut-être que lorsque le thread "set" commencera à changer, le thread "print" imprimera la liste et la sortie sera moitié 0 et moitié 1. C'est la désynchronisation des données. Pour éviter cette situation, le concept de serrures a été introduit.

Verrouillage multithread

Les verrous ont deux états : verrouillé et déverrouillé. Chaque fois qu'un thread tel que « set » veut accéder aux données partagées, il doit d'abord obtenir le verrou ; si un autre thread tel que « print » a déjà obtenu le verrou, laissez le thread « set » faire une pause, ce qui est un blocage synchrone ; jusqu'à ce que le fil " Imprimer " Une fois l'accès terminé et le verrou libéré, laissez le fil " défini " continuer.

Après un tel traitement, lors de l'impression de la liste, soit tous les 0, soit tous les 1 seront imprimés, et il n'y aura plus de scène embarrassante de moitiés de 0 et moitié de 1.

Exemple

Un exemple est le suivant :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import threading
import time
 
class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print "Starting " + self.name
       # 获得锁,成功获得锁定后返回True
       # 可选的timeout参数不填时将一直阻塞直到获得锁定
       # 否则超时后将返回False
        threadLock.acquire()
        print_time(self.name, self.counter, 3)
        # 释放锁
        threadLock.release()
 
def print_time(threadName, delay, counter):
    while counter:
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1
 
threadLock = threading.Lock()
threads = []
 
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
 
# 开启新线程
thread1.start()
thread2.start()
 
# 添加线程到线程列表
threads.append(thread1)
threads.append(thread2)
 
# 等待所有线程完成
for t in threads:
    t.join()
print "Exiting Main Thread"
Copier après la connexion
Ce qui précède est tout le contenu de cet article présente principalement Synchronisation multi-thread Python

connaissances liées, 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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!