파이썬에서 현재 프로세스의 pid와 쓰레드의 id 값을 어떻게 얻어올까요? 이 방법을 알아보겠습니다. 명령어는 window에 설치된 WSL-2, ubuntu 22.04 버전에서 실행하였습니다.
먼저, os.getpid()로 현재 프로세스의 pid (process id)를 얻어올 수 있습니다.
실행해 보겠습니다. python3 test.py를 실행시켜 보니, 130이라는 값이 출력됩니다.
pstree가 깔려 있다면, pstree -p로 부모 프로세스와 자식 프로세스들을 한눈에 볼 수 있습니다. python3(130)이라고 되어 있습니다. 이는 python3 프로세스의 pid가 130이라는 것을 의미합니다. ps -aux 명령어를 입력해 보겠습니다.
python3 ~ COMMAND를 입력해서 실행시킨 프로세스의 id가 130입니다. 일치함을 확인할 수 있습니다. os.getpid()로 현재 프로세스의 id를 얻어올 수 있습니다.
현재 쓰레드 id는 threading 모듈의 get_ident()를 이용하면 얻어올 수 있습니다. 간단한 프로그램 하나를 만들어 봅시다.
foo 함수와 baz 함수는 5초 동안 sleep을 한 다음에, 현재 thread의 고유 번호를 출력하고 끝냅니다.
Thread t1과 t2를 foo와 baz를 실행하게 합시다. 그리고, t1과 t2를 start 시킨 다음에, 이들이 끝날 때 까지 대기하도록 하겠습니다. 결과가 어떻게 나올까요?
140402703398464, 140402695005760이 나옵니다. 쓰레드 식별자가 반환됩니다. 그런데, threading에는 get_native_id() 라는 함수도 있습니다. 무슨 차이가 있을까요?
get_ident() 대신에 get_native_id() 함수를 통해 id 값을 얻어오겠습니다.
ps 명령어의 man 페이지를 보면, -L 옵션이 threads를 보여준다고 되어 있습니다. show LWP가 있네요. 먼저 test.py를 실행시킨 후에, 다른 세션에서 ps에 -eL 옵션을 붙인 다음에 제가 실행시킬 python3을 grep 조건으로 걸어 필터링 걸어 보겠습니다.
잘 보면 196, 197, 198이 나옴을 알 수 있습니다. 이는 LWP입니다. Light Weight Process를 의미합니다. 196, 197, 198을 주목해 보겠습니다.
test.py의 실행 결과는 197, 198이 나왔습니다. get_ident()와는 다르게 get_native_id()는 커널에 의해 할당된 쓰레드의 id 값을 얻어오게 됩니다.
'코딩 > 파이선' 카테고리의 다른 글
python 소수점 올림 버림 하는 방법을 알아봅시다. (0) | 2023.02.17 |
---|---|
실행 중인 파이썬 프로그램에서 pdb set_trace 함수로 디버거에 진입해 봅시다. (0) | 2023.01.29 |
파이썬 argparse 예제를 보면서 명령행 인자들을 받아 처리해 봅시다. (0) | 2022.12.22 |
왜 python의 pickle에서 언피클을 함부로 하면 안 되는지 알아봅시다. (0) | 2022.12.08 |
파이썬 dotenv load_dotenv를 이용해서 env 파일에 있는 환경변수를 load해 봅시다. (0) | 2022.11.09 |
최근댓글