Comment définir des variables locales de thread en Python

(*-*)浩
Libérer: 2019-07-04 13:54:33
original
2971 Les gens l'ont consulté

Il existe un concept appelé variables locales de thread. Généralement, nous verrouillons les variables globales dans les multi-threads. Ces variables sont des variables partagées. Afin de maintenir la synchronisation, nous effectuerons un traitement de manille.

Comment définir des variables locales de thread en Python

Mais une fois certaines variables initialisées, nous voulons simplement qu'elles existent toujours dans chaque thread, ce qui équivaut à une variable partagée au sein d'un thread, et entre les threads Elle est isolée et constitue une variable locale. Le module de threading python fournit une telle classe, appelée local. (Apprentissage recommandé : Tutoriel vidéo Python)

Lors de l'utilisation de variables locales, vous devez transmettre des paramètres. Par exemple, il existe un exemple où le programme doit traiter. applications client. Pour un client, un nouveau fil de discussion est ouvert pour le traitement et le client a des attributs (paramètres) tels que le nom, l'âge, le sexe, etc. Il est très fastidieux de transmettre des paramètres s'ils doivent tous être transmis. Python fournit le module threading.local pour faciliter le transfert des variables locales du thread. Regardez directement l'exemple suivant :

# /usr/bin/env python
# coding:utf-8


import threading

# Threading.local对象
ThreadLocalHelper = threading.local()
lock = threading.RLock()

class MyTheadEx(threading.Thread):
    def __init__(self, threadName, name, age, sex):
        super(MyTheadEx, self).__init__(name=threadName)
        self.__name = name
        self.__age = age
        self.__sex = sex

    def run(self):
        global ThreadLocalHelper
        ThreadLocalHelper.ThreadName = self.name
        ThreadLocalHelper.Name = self.__name
        ThreadLocalHelper.Age = self.__age
        ThreadLocalHelper.Sex = self.__sex
        MyTheadEx.ThreadPoc()

    # 线程处理函数
    @staticmethod
    def ThreadPoc():
        lock.acquire()
        try:
            print 'Thread={id}'.format(id=ThreadLocalHelper.ThreadName)
            print 'Name={name}'.format(name=ThreadLocalHelper.Name)
            print 'Age={age}'.format(age=ThreadLocalHelper.Age)
            print 'Sex={sex}'.format(sex=ThreadLocalHelper.Sex)
            print '----------'
        finally:
            lock.release()

if __name__ == '__main__':
    Tom = {'Name': 'tom', 'Age': 20, 'Sex': 'man'}
    xiaohua = {'Name': 'xiaohua', 'Age': 18, 'Sex': 'woman'}
    Andy = {'Name': 'Andy', 'Age': 40, 'Sex': 'man'}
    T = (Tom, xiaohua, Andy)
    threads = []
    for i in range(len(T)):
        t = MyTheadEx(threadName='id_{0}'.format(i), name=T[i]['Name'], age=T[i]['Age'], sex=T[i]['Sex'])
        threads.append(t)
    for i in range(len(threads)):
        threads[i].start()
    for i in range(len(threads)):
        threads[i].join()
    print 'All Done!!!'
Copier après la connexion

On peut voir que chaque thread peut lire et écrire l'objet threading.local sans interférer les uns avec les autres. Une utilisation raisonnable de threading.local peut grandement simplifier la logique du code tout en garantissant la sécurité des données de chaque sous-thread. La plus grande utilisation de Threading.local est de lier les informations utilisateur lors des requêtes HTTP, afin que chaque thread utilisateur puisse facilement accéder à ses propres ressources sans interférer les uns avec les autres.

Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !

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!