[threading - Thread-based parallelism]
■ Thread Objects
Thread class는 개별 제어 thread에서 실행하는 활동을 나타낸다. thread가 실행할 활동은 run() 메소드를 override 하거나 callable object를 전달하여 설정할 수 있다. ( override 시에는 __init__과 run() 메소드만 override 해야한다.) 각 thread의 활동을 시작하도록 하기 위해서는 start() 메소드를 호출한다. start 메소드는 thread의 run() 메소드를 실행시킨다. thread가 활동을 시작하면 alive 상태가 되는데, run() 메소드가 종료되거나 예외 발생 시에 alive 상태가 해제된다. alive 상태는 is_alive() 메소드를 사용하여서 확인할 수 있다.
한 thread는 다른 thread의 join() 메소드를 호출하여 실행 흐름을 제어할 수 있다. join() 메소드는 join() 메소드가 호출된thread가 종료될 때까지 호출한 thread의 실행을 막는다.
각 thread 객체는 이름을 가지고 있는데, 객체의 name attribute를 통해서 읽거나 변경할 수 있다.
만약 run() 메소드가 예외를 발생시키는 경우 threading.execepthook()이 호출되어서 예외를 처리한다.
thread는 daemon thread로 플래그 되는데, 이를 통해서 daemon thread만 남았을 때 전체 파이썬 프로그램을 종료시킨다. deamon thraed는 기본적으로 해당 thread를 생성한 parent thread로부터 상속받는다. 이외에 daemon 값을 변경하기 위해서는 thread 생성자의 daemon 파라미터나 thread의 daemon 속성을 통해서 설정할 수 있다.
- main thread 객체
• 파이썬 프로그램의 초기 제어 thread
- dummy thread 객체
• 외부 thread에 해당하는 객체들로 C코드에서 직접 만든 threading 모듈 외부에서 생성된 객체들로 제한적인 기능을 제공한다.
■ threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
- Thread 생성자이다.
- group: ThreadGroup 구현될 때 향후 확장을 위해서 예약되어 있다.
- target: run() 메소드에 의해서 호출될 callable object
- name: thread name
- args: target 호출을 위한 argument tuple
- kwargs: target 호출을 위한 keyword arguments dictionary
- daemon: thread가 daemon인지를 명시적으로 설정
- start()
•thread 활동 시작 함수
- run()
• thread 활동을 나타내는 메소드. subclass에서 override 해서 사용
- join(timeout=None)
• thread가 소멸될 때까지 대기한다. join() 메소드가 호출된 thread가 소멸되거나timeout 시간이 지날 때까지 호출한. thread가 대기한다.
- name
• thread 식별 목적으로 설정해주는 이름으로 여러 thread 들에게 같은 이름을 줄 수 있다.
- getName(), setName()
• old getter/setter API for name
- ident
• 현재 thread의 식별자. 아직 활동을 시작하지 않은 thread의 경우 None을 가진다.
- native_id
• 해당 thread의 native integral thread ID. OS 커널에 의해서 할단된 Thread ID (TID) 이다.
- is_alive()
• thread가 현재 alive 상태인지 아닌지 반환한다.
- daemon
• 현재 thread가 daemon thread 인지 아닌지를 반환한다. start()가 호출되기 전에 설정되어야한다. 그렇지 않으면 RuntimeError가 발생한다.
- isDaemon(), setDaemon()
• old gettter/setter API for daemon
<reference>
- Python Documentation >> The Python Standard Library >> Concurrent Execution
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] argparser (0) | 2021.09.11 |
---|---|
[Python] Python 병렬처리 - threading (3) (0) | 2021.05.08 |
[Python] Python 병렬처리 - threading (1) (1) | 2021.04.25 |
[Python] Asterisks(*) in Python (2) | 2021.04.14 |
[Python] 비동기 프로그래밍 (asyncio) (0) | 2021.04.08 |