>  기사  >  백엔드 개발  >  Python THREADING 모듈의 JOIN() 메서드

Python THREADING 모듈의 JOIN() 메서드

不言
不言원래의
2018-04-17 15:29:322047검색

이 글은 주로 Python THREADING 모듈의 JOIN() 메서드에 대한 심층적인 이해를 소개합니다. 이 글은 다른 글과 달리 간결하고 이해하기 쉬운 언어로 JOIN() 메서드에 대한 이해를 요약합니다. 참고가 필요해요

오시나에서 두 코드를 읽으며 많은 유익을 얻었습니다. 그중에서 Join() 메소드를 이해하지 못합니다. Python 공식 웹사이트 문서의 소개를 참조하세요:
join([timeout]): 프로세스가 끝날 때까지 기다립니다. 이것은 Join() 메소드가 호출되는 스레드가 끝날 때까지 호출 스레드를 차단합니다. (번역하기 어렵네요. 이렇게 해야겠네요)

하하, 이해하기 쉽습니다.
Join 메서드, 스레드나 함수가 실행 중에 다른 스레드를 호출해야 하고 완료될 때까지 계속할 수 없는 경우 이 스레드를 호출할 때 호출된 스레드의 Join 메서드를 사용할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

#-*- 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()

프로그램에서 마지막 Join() 메소드 호출은 하위 스레드의 Join() 메소드를 호출하는 주요 프로세스입니다. 하나씩. 네 개의 스레드가 모두 실행을 마치면 메인 스레드는 다음 코드를 실행합니다. 이는 여기서 종료된다는 의미입니다.
인터넷에서 찾은 또 다른 해당 방법:
3. Daemon

setDaemon()

이 방법은 기본적으로 Join과 반대입니다. 프로그램이 실행되는 동안 메인 스레드를 실행할 때, 메인 스레드가 하위 스레드를 생성하면 메인 스레드와 하위 스레드가 둘로 나뉘어 별도로 실행됩니다. 그러다가 메인 스레드가 완료되어 종료하려고 하면, 하위 스레드가 완료되었는지 확인합니다. 자식 스레드가 완료되지 않으면 기본 스레드는 종료하기 전에 자식 스레드가 완료될 때까지 기다립니다. 하지만 때때로 우리에게 필요한 것은 메인 스레드가 완료되는 한 하위 스레드의 완료 여부에 관계없이 메인 스레드와 함께 종료되어야 한다는 것입니다. 이 경우 setDaemon 메소드를 사용할 수 있습니다

위 내용은 Python THREADING 모듈의 JOIN() 메서드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.