"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 예제가 포함된 Python 스레딩 모듈에 대한 빠른 가이드

예제가 포함된 Python 스레딩 모듈에 대한 빠른 가이드

2024-09-18에 게시됨
검색:697

A Quick Guide to the Python threading Module with Examples

소개

Python의 스레딩 모듈은 스레드를 생성하고 관리할 수 있는 고급 인터페이스를 제공하여 코드를 동시에 실행할 수 있습니다. 이는 I/O 바인딩 작업과 같이 병렬로 실행될 수 있는 작업에 특히 유용할 수 있습니다. 다음은 스레딩 모듈에서 일반적으로 사용되는 메서드 및 함수 목록과 간단한 예입니다.

1. 쓰레드()

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

2. 시작()

스레드 활동을 시작합니다.

t = threading.Thread(target=print_numbers)
t.start()  # Runs the target function in a separate thread

3. 가입([시간 초과])

join() 메서드가 호출된 스레드가 종료될 때까지 호출 스레드를 차단합니다. 선택적으로 시간 초과를 지정할 수 있습니다.

t = threading.Thread(target=print_numbers)
t.start()
t.join(2)  # Waits up to 2 seconds for the thread to finish

4. is_alive()

스레드가 아직 실행 중이면 True를 반환합니다.

t = threading.Thread(target=print_numbers)
t.start()
print(t.is_alive())  # True if the thread is still running

5. 현재_스레드()

호출 스레드를 나타내는 현재 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

6. 열거()

현재 살아있는 모든 Thread 객체의 목록을 반환합니다.

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()

print(threading.enumerate())  # Lists all active threads

7. 활성_카운트()

현재 살아있는 Thread 객체의 수를 반환합니다.

print(threading.active_count())  # Returns the number of active threads

8. 잠금()

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()

9. 알락()

재진입 잠금을 사용하면 스레드가 자신을 차단하지 않고 여러 번 잠금을 획득()할 수 있습니다.

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()

10. 조건()

조건 개체를 사용하면 스레드가 일부 조건이 충족될 때까지 기다릴 수 있습니다.

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()

11. 이벤트()

이벤트 객체는 스레드 간 신호를 보내는 데 사용됩니다. 스레드는 이벤트가 설정될 때까지 기다릴 수 있으며 다른 스레드는 이벤트를 설정할 수 있습니다.

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

12. 세마포어()

세마포어 개체를 사용하면 리소스에 동시에 액세스할 수 있는 스레드 수를 제한할 수 있습니다.

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()

13. 타이머(간격, 기능)

타이머 스레드는 지정된 간격 후에 함수를 실행합니다.

def delayed_function():
    print("Executed after delay")

timer = threading.Timer(3, delayed_function)
timer.start()  # Executes `delayed_function` after 3 seconds

14. setDaemon(참)

데몬 스레드는 백그라운드에서 실행되며 기본 프로그램이 종료되면 자동으로 종료됩니다. 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 프로그램을 작성하는 데 필수적입니다.

릴리스 선언문 이 기사는 https://dev.to/usooldatascience/a-quick-guide-to-the-python-threading-module-with-examples-2b3g?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3