다른 언덕에서 돌, ------ "노래 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("退出主线程")