목차
- 파이썬 dictionary 타입 변수 활용 예제 이전 포스팅 참고 학습
- 파이썬 json, list, dict 타입 변환 예제 이전 포스팅 참고 학습
- 리눅스 top 프로세스 CPU 사용량 확인 명령 예제 이전 포스팅 참고 학습
- 파이썬 popen 활용하여 프로세스 CPU 사용량 결과 변수 저장 예제
- 파이썬 전체 CPU 사용량 출력 예제
파이썬 dictionary 타입 변수 활용 예제 이전 포스팅 참고 학습
안녕하세요 오늘 다룰 포스팅 주제는 파이썬에서 전체 프로세스의 CPU 사용량을 가져와 변수에 저장하여 문자열로 출력하는 예제입니다. 프로세들은 각자 서비스를 실행중인 상태라 CPU의 리소스를 나눠 사용하고 있습니다.
다만, 특정 하나의 프로세스가 너무 심하게 많은 자원을 사용하면 다른 프로세스가 공유할 수 없어 PC가 느려지거나 오류가 발생할 수 있습니다. 따라서 주기적으로 프로세스의 CPU 사용량 상태를 확인하여 관리해주는 것이 좋습니다. 오늘 예제를 실행하기전에 파이썬에서 Dict 변수 활용 방법을 잘 알아야합니다.
dictionary 타입 변수의 활용 예제는 이전 포스팅에서 다뤘으니 참고하여 학습해주세요.
2023.07.25 - [Python] - [Python] Dictionary 활용 예제 - 3(키 값 있는지 확인하고 가져오기, 전체 키 및 값 가져오기, 가져오면서 삭제)
파이썬 json, list, dict 타입 변환 예제 이전 포스팅 참고 학습
또한 이전 포스팅에서 파이썬에서 대표적인 변수 타입인 json, list, dict들 간의 변환 방법에 대해 알아보았습니다. 각자 타입에서 어떻게 파싱하여 저장해야하는지 다양한 예제가 포함되어있습니다. 만약 json 타입 변수에서 dict 변수 타입으로 값을 파싱하여 변환하고싶으시다면 아래 링크의 포스팅을 참고해주세요.
2023.08.08 - [Python/os] - [Python] 튜플, 리스트, dict 변환 예제
리눅스 top 프로세스 CPU 사용량 확인 명령 예제 이전 포스팅 참고 학습
마지막으로 전체 프로세스의 CPU 사용량을 확인하기 위해서는 리눅스의 top 명령을 활용해야합니다. 만약 윈도우 환경이시라면 명령이 실행되지 않을 수 있으니 리눅스에서 예제를 테스트해주세요. top 옵션을 활용하여 전체 프로세스의 현재 상태를 가져옵니다. 그러면 그 안에 프로세스명, CPU 사용량 등의 정보가 포함되어있습니다.
top 명령 사용법을 잘 모르신다면 아래 링크를 참고해주세요.
2023.08.03 - [Linux] - [Linux] top 활용 프로세스 CPU, 메모리 사용량 확인(정렬)
파이썬 popen 활용하여 프로세스 CPU 사용량 결과 변수 저장 예제
아래는 파이썬에서 popen 모듈을 활용하여 top 명령을 실행시키고 전체 프로세스의 CPU 사용량을 가져와 변수에 저장하는 예제입니다. 아무래도 top 결과이다보니 top 헤더와 body 리소스 사용량 등이 포함됩니다.
import subprocess
def popen_r(cmd):
kwargs = dict(shell = True, close_fds = True,
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
proc = subprocess.Popen(cmd, **kwargs)
resource = None
try:
with popen_r(('timeout %d' % 2) + ' ' + 'top -b') as f:
resource = f.read()
except Exception as e:
print(e)
print('ok')
파이썬 전체 CPU 사용량 출력 예제
아래는 변수에 저장된 전체 프로세스의 CPU 사용량 화면 정보를 print 문자열 포맷 출력 함수를 통해 출력한 예제입니다.
import io
import subprocess
class PopenFile(io.TextIOWrapper):
def __init__(self, proc, mode):
self.proc = proc
if mode == 'r': super().__init__(proc.stdout)
else: super().__init__(proc.stdin, write_through = True)
def __enter__(self):
self.proc.__enter__()
super().__enter__()
return self
def __exit__(self, exc, value, tb):
self.proc.__exit__(exc, value, tb)
super().__exit__(exc, value, tb)
return self
def wait(self): return self.proc.wait()
def popen_r(cmd):
kwargs = dict(shell = True, close_fds = True,
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
proc = subprocess.Popen(cmd, **kwargs)
return PopenFile(proc, 'r')
resource = None
try:
with popen_r(('timeout %d' % 2) + ' ' + 'top -b') as f:
resource = f.read()
except Exception as e:
print(e)
print(resource)