Heim >Backend-Entwicklung >Python-Tutorial >So verwenden Sie das Threading-Modul für die Multi-Thread-Verwaltung in Python 2.x

So verwenden Sie das Threading-Modul für die Multi-Thread-Verwaltung in Python 2.x

WBOY
WBOYOriginal
2023-08-01 11:30:341045Durchsuche

So verwenden Sie das Threading-Modul für die Multi-Thread-Verwaltung in Python 2.x

In Python kann Multi-Threading verwendet werden, um mehrere Aufgaben gleichzeitig im selben Programm auszuführen und so die Ausführungseffizienz des Programms zu verbessern. Das Threading-Modul ist ein von Python bereitgestelltes Modul zum Verwalten von Threads. Mit dem Threading-Modul können wir problemlos mehrere Threads erstellen, steuern und verwalten.

In diesem Artikel wird die Verwendung des Threading-Moduls für die Multi-Thread-Verwaltung in Python 2.x vorgestellt und relevante Codebeispiele gegeben. Zuerst müssen wir das Threading-Modul importieren:

import threading

Als nächstes können wir die Thread-Klasse des Threading-Moduls verwenden, um einen neuen Thread zu erstellen. Es gibt zwei Möglichkeiten, einen Thread zu erstellen: Eine besteht darin, die Thread-Klasse direkt zu instanziieren, und die andere darin, die Thread-Klasse zu erben und die run()-Methode zu überschreiben. Diese beiden Methoden werden im Folgenden vorgestellt.

Methode 1: Direkte Instanziierung der Thread-Klasse

# 创建线程的函数
def worker():
    print('Worker')

# 创建线程实例
t = threading.Thread(target=worker)

# 启动线程
t.start()

# 等待线程结束
t.join()

Im obigen Beispiel definieren wir zunächst eine worker()-Funktion, die als Aufgabe für die Ausführung des Threads dient. Dann haben wir ein Thread-Objekt t instanziiert und die Ausführungsfunktion des Threads als worker() über den Zielparameter angegeben. Als nächstes rufen wir die Methode t.start() auf, um den Thread zu starten, und der Thread beginnt mit der Ausführung der Aufgaben in der Funktion worker().

Methode 2: Erben Sie die Thread-Klasse und überschreiben Sie die run()-Methode.

# 创建继承自 Thread 的子类
class MyThread(threading.Thread):
    def run(self):
        print('Worker')

# 创建线程实例
t = MyThread()

# 启动线程
t.start()

# 等待线程结束
t.join()

In dieser Methode müssen wir eine Unterklasse erstellen, die von der Thread-Klasse erbt, und die run()-Methode in der Unterklasse überschreiben. Die Ausführungsaufgaben des Threads werden in der Methode run() definiert. Dann instanziieren wir ein Unterklassenobjekt t und verwenden dieses Objekt, um den Thread zu starten. Wie bei Methode 1 können wir auch warten, bis die Ausführung des Threads durch t.join() beendet ist.

Bei der Verwendung des Threading-Moduls für die Multi-Thread-Verwaltung stoßen wir häufig auf Situationen, in denen die Datenkommunikation zwischen Threads durchgeführt werden muss. Im Threading-Modul werden einige Synchronisierungsprimitive bereitgestellt, die uns dabei helfen, den Datenaustausch und die Kommunikation zwischen Threads zu realisieren.

Ein häufig verwendetes Synchronisationsprimitiv ist ein Mutex (Mutex). Mit Mutex-Sperren kann sichergestellt werden, dass nur ein Thread gleichzeitig auf eine gemeinsam genutzte Ressource zugreifen kann. Im Threading-Modul können wir die Lock-Klasse verwenden, um einen Mutex zu erstellen.

# 创建互斥锁
lock = threading.Lock()

# 定义一个共享数据
shared_data = []

# 创建线程的函数
def worker():
    # 加锁
    lock.acquire()
    try:
        # 对共享数据进行操作
        shared_data.append('Hello')
        shared_data.append('World')
        print(shared_data)
    finally:
        # 释放锁
        lock.release()

# 创建线程实例
t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)

# 启动线程
t1.start()
t2.start()

# 等待线程结束
t1.join()
t2.join()

Im obigen Beispiel erstellen wir zunächst eine Mutex-Sperre. Dann rufen wir in der Funktion worker() zunächst die Methode lock.acquire() auf, um die Sperre zu erhalten, bearbeiten dann die gemeinsam genutzten Daten shared_data und rufen schließlich die Methode lock.release() auf, um die Sperre aufzuheben. Durch die Verwendung von Mutex-Sperren können wir sicherstellen, dass nur ein Thread gleichzeitig shared_data betreiben kann, und Datenkonkurrenzprobleme vermeiden, die dadurch entstehen, dass mehrere Threads gleichzeitig auf gemeinsam genutzte Daten zugreifen.

Zusätzlich zu Mutex-Sperren bietet das Threading-Modul auch andere Synchronisationsprimitive wie Semaphor, Bedingungsvariable, Ereignis usw. Durch die ordnungsgemäße Anwendung dieser Synchronisierungsprimitive können wir eine komplexe Kommunikation und Koordination zwischen Threads erreichen.

Zusammenfassend lässt sich sagen, dass es sehr einfach ist, das Threading-Modul für die Multi-Thread-Verwaltung in Python 2.x zu verwenden. Wir können die Thread-Klasse des Threading-Moduls verwenden, um einen Thread zu erstellen und die Ausführungsaufgaben des Threads auf zwei Arten zu definieren (direktes Instanziieren der Thread-Klasse und Erben der Thread-Klasse). Gleichzeitig können wir durch Synchronisationsprimitive wie Mutex-Sperren auch den Datenaustausch und die Kommunikation zwischen Threads realisieren. Wenn wir dieses Wissen beherrschen, können wir Multithreading flexibel nutzen, um die Laufeffizienz des Programms zu verbessern.

Referenz:

  1. Python offizielles Dokumentations-Threading-Modul: https://docs.python.org/2/library/threading.html

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Threading-Modul für die Multi-Thread-Verwaltung in Python 2.x. 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