Heim  >  Artikel  >  Backend-Entwicklung  >  JOIN()-Methode im Python-THREADING-Modul

JOIN()-Methode im Python-THREADING-Modul

不言
不言Original
2018-04-17 15:29:321981Durchsuche

Dieser Artikel führt hauptsächlich in ein detailliertes Verständnis der JOIN()-Methode im Python-THREADING-Modul ein. Dieser Artikel fasst das Verständnis der JOIN()-Methode in einer prägnanten und leicht verständlichen Sprache zusammen. Freunde in Not können sich darauf beziehen

Ich habe sehr davon profitiert, die beiden Codes auf Oschina zu lesen. Unter anderem verstehe ich die Methode „join()“ nicht. Siehe die Einleitung des offiziellen Python-Website-Dokuments:
join([timeout]): Warten Sie, bis der Prozess beendet ist. Dadurch wird der aufrufende Thread blockiert, bis der Thread endet, für den die Methode „join()“ aufgerufen wird. (Es ist schwer zu übersetzen, das sollte es bedeuten)

Haha, das ist leicht zu verstehen.
Join-Methode: Wenn ein Thread oder eine Funktion während der Ausführung einen anderen Thread aufrufen muss und die Ausführung nicht fortgesetzt werden kann, bis sie abgeschlossen ist, kann beim Aufrufen dieses Threads die Join-Methode des aufgerufenen Threads verwendet werden.

Code kopieren Der Code lautet wie folgt:

#-*- encoding: gb2312 -*-
import string, threading, time
 
def thread_main(a):
    global count, mutex
    # 获得线程名
    threadname = threading.currentThread().getName()
 
    for x in xrange(0, int(a)):
        # 取得锁
        mutex.acquire()
        count = count + 1
        # 释放锁
        mutex.release()
        print threadname, x, count
        time.sleep(1)
 
def main(num):
    global count, mutex
    threads = []
 
    count = 1
    # 创建一个锁
    mutex = threading.Lock()
    # 先创建线程对象
    for x in xrange(0, num):
        threads.append(threading.Thread(target=thread_main, args=(10,)))
    # 启动所有线程
    for t in threads:
        t.start()
    # 主线程中等待所有子线程退出
    for t in threads:
        t.join()  
 
if __name__ == '__main__':
    num = 4
    # 创建4个线程
    main(4)
###################################################################
#-*- encoding: gb2312 -*-
import threading
import time
 
class Test(threading.Thread):
    def __init__(self, num):
        threading.Thread.__init__(self)
        self._run_num = num
 
    def run(self):
        global count, mutex
        threadname = threading.currentThread().getName()
 
        for x in xrange(0, int(self._run_num)):
            mutex.acquire()
            count = count + 1
            mutex.release()
            print threadname, x, count
            time.sleep(1)
 
if __name__ == '__main__':
    global count, mutex
    threads = []
    num = 4
    count = 1
    # 创建锁
    mutex = threading.Lock()
    # 创建线程对象
    for x in xrange(0, num):
        threads.append(Test(10))
    # 启动线程
    for t in threads:
        t.start()
    # 等待子线程结束
    for t in threads:
        t.join()

Im Programm ist der letzte Aufruf der join()-Methode klar Der Hauptprozess ruft nacheinander die Methode „join()“ von Thread auf. Wenn die Ausführung aller vier Threads abgeschlossen ist, führt der Hauptthread den folgenden Code aus, was bedeutet, dass er hier beendet wird.
Eine weitere entsprechende Methode im Internet:
3. Daemon-Prozess

setDaemon()

Diese Methode ist im Grunde das Gegenteil von Join. Wenn wir einen Hauptthread ausführen, während das Programm ausgeführt wird, werden der Hauptthread und der Unterthread getrennt ausgeführt, wenn der Hauptthread einen Unterthread erstellt. Es wird geprüft, ob der Unterthread abgeschlossen ist. Wenn der untergeordnete Thread nicht abgeschlossen ist, wartet der Hauptthread, bis der untergeordnete Thread abgeschlossen ist, bevor er beendet wird. Manchmal benötigen wir jedoch Folgendes: Solange der Hauptthread abgeschlossen ist, muss er unabhängig davon, ob der Unterthread abgeschlossen ist, zusammen mit dem Hauptthread beendet werden. In diesem Fall können wir die setDaemon-Methode

Das obige ist der detaillierte Inhalt vonJOIN()-Methode im Python-THREADING-Modul. 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