Python의 스레딩 모듈은 스레드를 생성하고 관리할 수 있는 고급 인터페이스를 제공하여 코드를 동시에 실행할 수 있습니다. 이는 I/O 바인딩 작업과 같이 병렬로 실행될 수 있는 작업에 특히 유용할 수 있습니다. 다음은 스레딩 모듈에서 일반적으로 사용되는 메서드 및 함수 목록과 간단한 예입니다.
Thread 클래스는 스레딩 모듈의 핵심입니다. 이 클래스를 사용하여 새 스레드를 만들고 시작할 수 있습니다.
import threading def print_numbers(): for i in range(5): print(i) t = threading.Thread(target=print_numbers) t.start() # Starts a new thread t.join() # Waits for the thread to finish
스레드 활동을 시작합니다.
t = threading.Thread(target=print_numbers) t.start() # Runs the target function in a separate thread
join() 메서드가 호출된 스레드가 종료될 때까지 호출 스레드를 차단합니다. 선택적으로 시간 초과를 지정할 수 있습니다.
t = threading.Thread(target=print_numbers) t.start() t.join(2) # Waits up to 2 seconds for the thread to finish
스레드가 아직 실행 중이면 True를 반환합니다.
t = threading.Thread(target=print_numbers) t.start() print(t.is_alive()) # True if the thread is still running
호출 스레드를 나타내는 현재 Thread 객체를 반환합니다.
import threading def print_current_thread(): print(threading.current_thread()) t = threading.Thread(target=print_current_thread) t.start() # Prints the current thread info
현재 살아있는 모든 Thread 객체의 목록을 반환합니다.
t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_numbers) t1.start() t2.start() print(threading.enumerate()) # Lists all active threads
현재 살아있는 Thread 객체의 수를 반환합니다.
print(threading.active_count()) # Returns the number of active threads
Lock 객체는 경쟁 조건을 방지하는 데 사용되는 기본 잠금입니다. 이를 사용하면 한 번에 하나의 스레드만 공유 리소스에 액세스하도록 할 수 있습니다.
lock = threading.Lock() def thread_safe_function(): with lock: # Acquires the lock # Critical section print("Thread-safe code") t = threading.Thread(target=thread_safe_function) t.start()
재진입 잠금을 사용하면 스레드가 자신을 차단하지 않고 여러 번 잠금을 획득()할 수 있습니다.
lock = threading.RLock() def reentrant_function(): with lock: with lock: # Same thread can acquire the lock again print("Reentrant lock example") t = threading.Thread(target=reentrant_function) t.start()
조건 개체를 사용하면 스레드가 일부 조건이 충족될 때까지 기다릴 수 있습니다.
condition = threading.Condition() def thread_wait(): with condition: condition.wait() # Wait for the condition print("Condition met") def thread_notify(): with condition: condition.notify() # Notify the waiting thread t1 = threading.Thread(target=thread_wait) t2 = threading.Thread(target=thread_notify) t1.start() t2.start()
이벤트 객체는 스레드 간 신호를 보내는 데 사용됩니다. 스레드는 이벤트가 설정될 때까지 기다릴 수 있으며 다른 스레드는 이벤트를 설정할 수 있습니다.
event = threading.Event() def wait_for_event(): event.wait() # Wait until the event is set print("Event has been set") t = threading.Thread(target=wait_for_event) t.start() event.set() # Set the event to allow the thread to continue
세마포어 개체를 사용하면 리소스에 동시에 액세스할 수 있는 스레드 수를 제한할 수 있습니다.
semaphore = threading.Semaphore(2) # Only 2 threads can access the resource at once def access_resource(): with semaphore: print("Resource accessed") t1 = threading.Thread(target=access_resource) t2 = threading.Thread(target=access_resource) t3 = threading.Thread(target=access_resource) t1.start() t2.start() t3.start()
타이머 스레드는 지정된 간격 후에 함수를 실행합니다.
def delayed_function(): print("Executed after delay") timer = threading.Timer(3, delayed_function) timer.start() # Executes `delayed_function` after 3 seconds
데몬 스레드는 백그라운드에서 실행되며 기본 프로그램이 종료되면 자동으로 종료됩니다. setDaemon(True)을 호출하거나 daemon=True를 Thread 생성자에 전달하여 스레드를 데몬으로 만들 수 있습니다.
t = threading.Thread(target=print_numbers, daemon=True) t.start() # Daemon thread will exit when the main program ends
스레딩 모듈은 Python에서 동시성을 처리하기 위한 강력한 도구입니다. 스레드를 생성하고 제어하는 여러 클래스와 메서드를 제공하므로 코드를 병렬로 쉽게 실행할 수 있습니다. 기본 Thread 객체 사용부터 Lock 및 Semaphore를 사용한 동기화 관리에 이르기까지 이 모듈은 동시 Python 프로그램을 작성하는 데 필수적입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3