>  기사  >  백엔드 개발  >  python3 멀티스레딩

python3 멀티스레딩

(*-*)浩
(*-*)浩원래의
2019-09-02 14:40:153759검색

python3 멀티스레딩

멀티스레딩은 여러 프로그램을 동시에 실행하는 것과 유사하며 다음과 같은 장점이 있습니다. (추천 학습 : 웹 프런트 엔드 비디오 튜토리얼)

스레드를 사용하면 장기적인 프로그램 작업을 백그라운드로 처리할 수 있습니다.

사용자 인터페이스가 더 매력적일 수 있습니다. 예를 들어 사용자가 버튼을 클릭하여 특정 이벤트의 처리를 시작하면 진행률 표시줄이 팝업되어 처리 진행 상황을 표시할 수 있습니다.

프로그램이 더 빠르게 실행될 수 있습니다.

스레드는 사용자 입력, 파일 읽기 및 쓰기, 네트워크 데이터 전송 및 수신과 같은 일부 대기 작업을 구현하는 데 더 유용합니다. 이 경우 메모리 사용량 등과 같은 일부 귀중한 리소스를 해제할 수 있습니다.

각 독립 스레드에는 프로그램 실행을 위한 입구, 순차적 실행 시퀀스 및 프로그램 종료가 있습니다. 그러나 스레드는 독립적으로 실행될 수 없으며 응용 프로그램 내에 존재해야 하며 응용 프로그램은 다중 스레드 실행 제어를 제공합니다.

각 스레드에는 스레드 컨텍스트라고 하는 고유한 CPU 레지스터 세트가 있으며, 이는 스레드가 마지막으로 실행한 CPU 레지스터의 상태를 반영합니다.

명령 포인터와 스택 포인터 레지스터는 스레드 컨텍스트에서 가장 중요한 두 가지 레지스터입니다. 스레드는 항상 프로세스 컨텍스트에서 실행됩니다. 이 주소는 해당 프로세스를 소유하는 프로세스의 주소 공간을 표시하는 데 사용됩니다. 스레드.

스레드는 선점(중단)될 수 있습니다.

다른 스레드가 실행 중인 동안 스레드가 일시적으로 보류(휴면 상태라고도 함)될 수 있습니다. 이를 스레드 백오프라고 합니다.

스레드는 다음과 같이 나눌 수 있습니다.

커널 스레드: 운영 체제 커널에 의해 생성 및 취소됩니다.

사용자 스레드: 커널 지원 없이 사용자 프로그램에 구현된 스레드입니다.

Python3 스레드에서 일반적으로 사용되는 두 가지 모듈은 다음과 같습니다.

_thread

threading(권장)#🎜 🎜 #

thread 모듈은 더 이상 사용되지 않습니다. 사용자는 대신 스레딩 모듈을 사용할 수 있습니다. 따라서 "thread" 모듈은 Python3에서 더 이상 사용할 수 없습니다. 호환성을 위해 Python3에서는 스레드 이름을 "_thread"로 변경했습니다.

Python 스레드 학습 시작

Python에서 스레드를 사용하는 방법에는 두 가지가 있습니다: 스레드 개체를 래핑하는 함수 또는 클래스입니다.

기능: _thread 모듈에서 start_new_thread() 함수를 호출하여 새 스레드를 생성합니다. 구문은 다음과 같습니다:

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

매개변수 설명:

function - 스레드 함수.

args - 스레드 함수에 전달된 매개변수는 튜플 유형이어야 합니다.

kwargs - 선택적 매개변수입니다.

예:

#!/usr/bin/python3

import _thread
import time

# 为线程定义一个函数
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print ("%s: %s" % ( threadName, time.ctime(time.time()) ))

# 创建两个线程
try:
   _thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   _thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print ("Error: 无法启动线程")

while 1:
   pass

위 내용은 python3 멀티스레딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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