[python] 1개 프로세스가 사용가능한 CPU core수를 제한하는 방법

About_work·2024년 2월 14일
0

process, thread

목록 보기
16/23
  • 가장 일반적인 방법 중 하나는 운영체제의 기능을 활용하는 것
  • Linux와 같은 Unix 기반 시스템에서는 taskset 명령어를 사용하거나, 파이썬 내부에서 os 모듈을 이용하여 특정 코어에 프로세스를 할당
  • Windows에서는 이와 유사한 기능을 제공하는 도구가 제한적이므로, 주로 외부 라이브러리나 시스템 설정을 통해 제어합니다.

Linux/Unix 시스템에서의 CPU 코어 제한

taskset 명령어 사용

taskset은 프로세스가 특정 CPU 코어에만 할당되도록 설정하는 명령어입니다. 이 명령어를 사용하려면, 터미널에서 파이썬 스크립트를 실행하기 전에 다음과 같이 입력합니다:

taskset -c [코어번호] python3 your_script.py

여기서 [코어번호]는 할당하려는 CPU 코어의 번호입니다. 여러 코어를 사용하려면 쉼표로 구분하여 입력합니다 (예: 0,1).

os.sched_setaffinity 함수 사용

파이썬 스크립트 내부에서 특정 코어를 할당하려면, os 모듈의 sched_setaffinity 함수를 사용할 수 있습니다. 다음은 이를 사용하는 예제 코드입니다:

import os

def set_affinity(pid, cores):
    os.sched_setaffinity(pid, cores)

# 현재 프로세스에 대한 CPU Affinity 설정
set_affinity(0, {0, 1})  # 현재 프로세스를 CPU 0과 1에만 할당

이 코드는 현재 실행 중인 프로세스를 CPU 0과 1에만 할당합니다. pid0을 전달하면 현재 프로세스를 의미합니다. {0, 1}은 프로세스를 할당하고자 하는 CPU 코어의 집합입니다.

Windows 시스템에서의 CPU 코어 제한

Windows에서는 taskset과 유사한 기본 제공 도구가 없으므로, 프로세스의 CPU 친화도(affinity)를 설정하는 외부 라이브러리나 도구를 사용해야 할 수 있습니다. 예를 들어, psutil 라이브러리를 사용하여 유사한 기능을 구현할 수 있습니다:

import psutil
import os

p = psutil.Process(os.getpid())  # 현재 프로세스 객체 얻기
p.cpu_affinity([0, 1])  # CPU 0과 1에만 프로세스 실행 제한

이 코드는 psutil 라이브러리를 사용하여 현재 프로세스를 CPU 0과 1에만 할당합니다. psutil은 설치가 필요한 외부 라이브러리이므로, 사용하기 전에 pip install psutil을 통해 설치해야 합니다.

각 방법은 운영체제와 사용 환경에 따라 선택하여 사용할 수 있습니다. CPU 코어를 제한하는 것은 멀티쓰레딩이나 멀티프로세싱 작업을 할 때, 자원 사용을 최적화하고 성능을 향상시키는 데 유용할 수 있습니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글