English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python에서 스레드 기반의 병행성

컴퓨터 과학에서 스레드는 운영 체제의 일부인 스케줄러가 독립적으로 관리할 수 있는 명령어 집합입니다.

스레드의 주요 기능은 여러 스레드를 동시에 실행하는 것입니다. 스레드는 다른 작업, 프로그램 내의 함수 호출 및 여러 스레드가 동시에 실행되는 것을 의미하지만, 다른 컴퓨터에서 실행되는 것은 아닙니다.

이 두 가지 경우에 다중 스레드를 사용합니다.

  • 서브 프로그램의 출력이 메인 프로그램과 결합되어야 할 때.

  • 메인 프로그램이 서로 독립된 코드를 포함할 때.

스레드 모듈

Python은 매우 강력한 스레드 모듈을 제공하며, 스레드에 대한 고급 지원도 제공합니다.

스레드 모듈은 스레드와 관련된 데이터를 가져오는 많은 함수를 정의하고, 이 함수들은 자동으로 실행됩니다.

threading.active_count()

이 함수는 현재 활성 Thread 객체의 개수를 반환합니다. 여기서 반환된 계산은 반환된 리스트의 길이와 같습니다.enumerate().

threading.current_thread()

이 함수는 현재 Thread 객체를 반환합니다. 이는 호출자의 제어 스레드와 일치합니다.

threading.get_ident()

이 함수는 현재 스레드의 "스레드 식별자"를 반환합니다. 이는 비ゼ로 정수입니다.

threading.enumerate()

此函数返回当前活动的所有Thread对象(包括守护线程)的列表,current_thread()函数创建虚拟线程和主线程,并排除终止的线程和尚未启动的线程。

이 함수는 현재 활동 중인 모든 Thread 객체(보호자 스레드 포함)의 목록을 반환합니다。current_thread() 함수는 가상 스레드와 메인 스레드를 생성하고, 종료된 스레드와 아직 시작되지 않은 스레드를 제외합니다。

threading.main_thread()

이 함수는 메인 스레드 객체를 반환합니다。

threading.settrace(func)run()이 함수는 sys.settrace()에 각 스레드를 전달하기 전에 호출됩니다。

threading.setprofile(func)

모든 스레드를 시작한 후, 설정 파일 기능을 설정합니다.run()이 함수는 sys.setprofile()에 각 스레드를 전달하기 전에 호출됩니다。

threading.stack_size([size])

이 함수는 스레드 스택 크기를 반환하고, 새 스레드를 생성할 때 사용됩니다。

스레드.TIMEOUT_MAX

이는 블록함수의 타임아웃 파라미터(Lock.acquire(),RLock.acquire(),Condition.wait() 등)의 최대값을 가진 상수입니다。

예제 코드

import threading
def trace_function():
   print("트레이스 함수를 전달 중입니다")
   def profile():
      print("프로파일 스레드: " + str(threading.current_thread().getName()))
      class mythread(threading.Thread):
      def __init__(self, thread_name, thread_ID):
         threading.Thread.__init__(self)
         self.thread_name = thread_name
         self.thread_ID = thread_ID
      def run(self):
         print(str(self.thread_ID));
         print("활성 스레드는: "+ str(threading.active_count()))
         print("현재 스레드는: " + str(threading.current_thread().getName()))
         my_thread1 mythread("PP", 500)
         my_thread2 mythread("PythonProgram", 1000);
         print("메인 �hread 이름: ") + str(threading.main_thread().getName()))
         print("메인 �hread 식별: ")+ str(threading.get_ident()))
         print("스택 크기 = ") + str(threading.stack_size()))
      print(threading.settrace(trace_function()))
   threading.setprofile(profile())
my_thread1.start()
my_thread2.start()
print("리스트 편집: ")
print(threading.enumerate())
print("나가기")

출력 결과

메인 �hread 이름: MainThread
메인 �hread 식별 5436
스택 크기 = 0
trace 함수 전달
None
프로파일 �hread: MainThread
500
1000리스트 편집: 활성 �hread은: 6
[<_MainThread(MainThread, 시작 5436)>, <Thread(Thread-4, 시작 daemon 1960)>, <Heartbeat(Thread-5, 시작 daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, 시작 4304)>, <mythread(Thread-8, 시작 8460)>, <mythread(Thread-9, 시작 4668)>]
나가기
현재 �hread은: �hread-8
활성 �hread은: 5
현재 �hread은: �hread-9
Elasticsearch 가이드