본문 바로가기

프로그래밍언어/Python

[Python] Python 병렬처리 - threading (1)

반응형

[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

반응형