파이썬 전투 : 사용 파이썬 멀티 스레딩

다른 언덕에서 돌, ------ "노래 Xiaoya 헤밍의 책"을 배울 수 있습니다

I. 서론

무엇의 스레드에서 모든 사람들이 프로세스 어떤 경우 여전히 의문을 가지고,이 이러한 개념의 더 이상 중복 설명입니다 Google 검색하시기 바랍니다, 본 논문의 목적은 여러 가지 방법으로 파이썬 멀티 스레딩을 요약합니다.

두 모듈에서 Python3 공통점 :

  • _실
  • 스레딩 (권장)

스레드 모듈은 포기했습니다. 사용자는 대신 모듈 스레딩으로 사용할 수 있습니다. 그래서, 당신은 더 이상에 Python3에서 "스레드"모듈을 사용할 수 없습니다. 호환성을 위해, Python3 스레드 이름 바꾸기 "_thread".

다음은 실제 사례를 사용하여 여러 스레드를 구현하는 방법은 세 가지입니다.

두 파이썬 멀티 스레드

1. _thread 멀티 스레드

파이썬 스레드는 두 가지 방법으로 사용 : 함수 또는 스레드 객체 클래스를 포장하는.
기능 : 전화 _thread 모듈 start_new_thread () 함수는 새로운 스레드를 생성합니다. 구문은 다음과 같습니다 :

_thread.start_new_thread ( function, args[, kwargs] )

매개 변수 :

  • 기능 - 스레드 함수.
  • 인수 - 스레드 함수에 전달 된 인수, 그는 튜플 유형이어야합니다.
  • kwargs로 - 선택 사항.

주 : 제어하지 않고 종료하는 경우에 대한 _thread 과정. 때 메인 스레드, 다른 모든 스레드는 강제 종료했다. 이 경고 또는 적절한 정리를 발행하지 않습니다. 따라서 파이썬은 일반적으로 완전한 스레드 제어 메커니즘 및 세마포어 메커니즘을 제공 고급 스레딩 모듈을 사용하는 멀티 스레딩.

케이스 :

# -*- coding: utf-8 -*-
import _thread
import time


def print_time(thread_name, sleep_time):
    for i in range(5):
        time.sleep(sleep_time)
        print("threadName: %s, time is %s" % (thread_name, time.ctime(time.time())))


if __name__ == "__main__":
    try:
        _thread.start_new_thread(print_time, ("thread-1", 2))
        _thread.start_new_thread(print_time, ("thread-2", 2))
    except:
        print("线程为启动")

while 1:
    pass

만들기 2. threading.Thread를 통해 멀티 스레드

python3.x 모듈을 나사에 의해 새로운 스레드를 만들고, 두 가지 방법을 갖는다 : 하나 threading.Thread (목표 = 실행 방법)에 의해 인 - 즉, 스레드 객체 (또는 객체)의 실행 방법에 전달;

# -*- coding: utf-8 -*-
import time
import threading


def print_time():
    for i in range(5):
        time.sleep(1)
        print("threadName: %s, time is %s" % (threading.current_thread().getName(),
                                              time.ctime(time.time())))


if __name__ == "__main__":
    t = threading.Thread(target=print_time)
    t2 = threading.Thread(target=print_time)
    t.start()
    t2.start()
    t.join() # join是阻塞当前线程(此处的当前线程时主线程) 主线程直到Thread-1结束之后才结束
    print("主线程打印内容")

만들기 3. 상속을 통해 멀티 스레드는 서브 클래스를 정의 threading.Thread

우리는 직접 threading.Thread에서 새 하위 클래스를 상속하여 생성 할 수 있으며, 통화 시작 인스턴스화 () 메소드 후 스레드의 run () 메소드를 호출 새 스레드를 시작합니다 :

# -*- coding: utf-8 -*-

import threading
import time

exitFlag = 0


class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter

    def run(self):
        print("开始线程:" + self.name)
        print_time(self.name, self.counter, 5)
        print("退出线程:" + self.name)


def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1


if __name__ == "__main__":
    # 创建新线程
    thread1 = myThread(1, "Thread-1", 1)
    thread2 = myThread(2, "Thread-2", 2)

    # 开启新线程
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print("退出主线程")
게시 19 개 원래 기사 · 원 찬양 67 ·은 20000 +를 볼

추천

출처blog.csdn.net/m1090760001/article/details/103467195