[threading - Thread-based parallelism]
threading 모듈은 _thread 모듈 위에 high-level threading interface를 구축하는 모듈이다.
■ Cpython implementationo detail
CPython에서는 GIL로 인해서 하나의 파이썬 코드에서 하나의 스레드밖에 사용할 수 없다. 그렇기 때문에 멀티 코어의 연산자원을 효율적으로 사용하기 위해서는 multiprocessing이나concurrent.futures.ProcessPoolExecutor를 사용하는 것이 좋다. 반면에 I/O 병목 작업을 동시에 작업하는 경우에는 threading을 사용하는 것이 유리하다.
■ threading functions
threading.active_count()
- 현재 살아있는 Thread 객체 수를 반환한다.
threading.current_thread()
- 현재 호출한 스레드에 해당하는 Thread 객체를 반환한다. 호출한 스레드가threading으로 생성되지 않은 경우, 기능이 일부 제한된 dummy thread 객체를 반환한다.
threading.execpthook(args, /)
- Thread.run()을 실행하면서 발생한 exception 중에서 따로 처리되지 않은exception 들을 처리한다.
- args
• exc_type: Exception type. exc_type이 SystemExit인 경우 무시된다. 그 외의 exception들은 sys.stderr를 통해서 예외 내용이 출력된다.
• exc_value: Exception value, can be None
• exc_traceback: Exception traceback, can be None
• thread: exception을 발생시킨 Thread, can be None
- 만약 이 함수가 예외를 발생시킨 경우, sys.excepthook()이 호출되어 예외를 처리한다.
- Thread.run()의 예외를 처리하기 위해서 override 되어 사용될 수 있다.
threading.get_ident()
- 현재 스레드의 식별자를 반환한다. 0이 아닌 int 형식의 값이다. 직접적으로 스레드를 포인팅하지는 않지만 딕셔너리에서의 키값 등으로 사용할 수 있다.
threading.get_native_id()
- 커널이 할당한 현재 스레드의 native ID를 반환한다. 양의 정수이며, 시스템 전체에서 특정 thread를 구분하는데 사용할 수 있습니다.
threading.enumerate()
- 전체 Thread 객체 리스트를 반환한다.
- daemon thread (current_thread()에 의해서 만들어진 dummy thread 객체) 객체도 포함한다.
threading.main_thread()
- main Thread 객체를 반환한다.
threading.settrace(func)
- threading 모듈에 의해서 생성된 thread들에 대한 trace function을 설정한다. 각 thread에서 run() 메서드가 호출되기 전에 func는 sys.settrace()로 전달된다.
threading.setprofile(func)
- threading 모듈에 의해서 생성된 thread들에 대한 profile function을 설정한다. 각 thread에서 run() 메서드가 호출되기 전에 func는 sys.setprofile()로 전달된다.
threading.stack_size([size])
- 새로운 thread 생성 시에 사용된 thread stack size를 반환한다.
- size: 이후에 만들어지는 스레드에 사용할 stack size. 0이거나 32768 (32KiB) 이상의 양의 정숫값. size를 지정하지 않는 경우는 0이 사용된다. (플랫폼이나 구성된 기본값을 사용) 32KiB는 현재 인터프리터 자체에 충분한 스택 공간을 보장하기 위한 최소 크기이다.
- 스택 크기 변경이 지원되지 않는 경우 RuntimeError 발생
- 지정된 스택 크기가 유효하지 않으면 ValueError 발생하고 스택 크기는 수정되지 않음
■ threading constant
threading.TIMEOUT_MAX
- blocking function들의 최대 timeout 매개변수 값
- 이 값보다 큰 경우 OverflowError 발생
<reference>
- Python Documentation >> The Python Standard Library >> Concurrent Execution
'프로그래밍언어 > Python' 카테고리의 다른 글
[Python] Python 병렬처리 - threading (3) (0) | 2021.05.08 |
---|---|
[Python] Python 병렬처리 - threading (2) (0) | 2021.04.25 |
[Python] Asterisks(*) in Python (2) | 2021.04.14 |
[Python] 비동기 프로그래밍 (asyncio) (0) | 2021.04.08 |
[Python] 프로젝트 패키징 & 배포 (0) | 2021.04.01 |