Heim  >  Artikel  >  Backend-Entwicklung  >  So definieren Sie lokale Thread-Variablen in Python

So definieren Sie lokale Thread-Variablen in Python

(*-*)浩
(*-*)浩Original
2019-07-04 13:54:332988Durchsuche

Es gibt ein Konzept namens Thread-Lokalvariablen. Diese Variablen sind gemeinsam genutzte Variablen. Um die Synchronisierung aufrechtzuerhalten, führen wir eine Fesselverarbeitung durch.

So definieren Sie lokale Thread-Variablen in Python

Aber nachdem einige Variablen initialisiert wurden, möchten wir nur, dass sie immer in jedem Thread vorhanden sind, was einer gemeinsam genutzten Variablen innerhalb eines Threads und zwischen Threads entspricht Es ist isoliert und eine lokale Variable. Das Python-Threading-Modul stellt eine solche Klasse mit dem Namen „local“ bereit. (Empfohlenes Lernen: Python-Video-Tutorial)

Bei der Verwendung lokaler Variablen müssen Sie beispielsweise Parameter übergeben, die das Programm verarbeiten muss Kundenanwendungen: Für einen Kunden wird ein neuer Thread zur Verarbeitung geöffnet, und der Kunde verfügt über Attribute (Parameter) wie Name, Alter, Geschlecht usw. Es ist sehr umständlich, Parameter zu übergeben, wenn sie alle übergeben werden müssen. Python stellt das Modul threading.local bereit, um die Übertragung lokaler Thread-Variablen zu erleichtern. Schauen Sie sich das folgende Beispiel direkt an:

# /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!!!'

Es ist ersichtlich, dass jeder Thread das threading.local-Objekt lesen und schreiben kann, ohne sich gegenseitig zu stören. Durch die sinnvolle Verwendung von threading.local kann die Codelogik erheblich vereinfacht und gleichzeitig die Datensicherheit jedes Unterthreads gewährleistet werden. Der größte Nutzen von Threading.local besteht darin, Benutzerinformationen bei HTTP-Anfragen zu binden, sodass jeder Benutzerthread problemlos auf seine eigenen Ressourcen zugreifen kann, ohne sich gegenseitig zu stören.

Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonSo definieren Sie lokale Thread-Variablen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn