1. 프로세스와 CPU 어핀니티
프로세스의 CPU 어핀니티(Affinity)는 해당 프로세스가 사용할 수 있는 CPU의 집합을 나타냅니다. 운영체제는 다중 코어 시스템에서 여러 프로세스를 실행할 때 각 프로세스를 어떤 CPU에 할당할지 결정합니다.
특정 프로세스에 CPU 어핀니티를 설정하면 해당 프로세스는 지정된 CPU들 중에서만 실행될 수 있습니다. 이는 프로세스 성능 향상을 위해 사용되기도 하며, 특정 CPU에 대한 리소스 독립성을 제공하는 데 유용합니다.
Python에서는 os
모듈을 사용하여 프로세스의 CPU 어핀니티를 설정하고 조회할 수 있습니다. os.sched_setaffinity()
함수는 프로세스의 CPU 어핀니티를 설정하고, os.sched_getaffinity()
함수는 현재 프로세스의 CPU 어핀니티를 조회합니다.
2. os.sched_setaffinity()
os.sched_setaffinity()
함수는 프로세스의 CPU 어핀니티를 설정하는 데 사용됩니다. 이 함수는 다음과 같은 형식으로 사용됩니다.
import os
# pid: 대상 프로세스의 ID
# cpus: 어핀할 CPU들의 집합 (list 혹은 set)
os.sched_setaffinity(pid, cpus)
예를 들어, 다음 코드는 현재 프로세스에 CPU 0과 1에 대한 어핀니티를 설정하는 예입니다.
import os
pid = os.getpid()
# CPU 0과 1에 대한 어핀니티 설정
os.sched_setaffinity(pid, {0, 1})
3. os.sched_getaffinity()
os.sched_getaffinity()
함수는 현재 프로세스의 CPU 어핀니티를 조회하는 데 사용됩니다. 이 함수는 다음과 같은 형식으로 사용됩니다.
import os
# pid: 조회할 프로세스의 ID
cpus = os.sched_getaffinity(pid)
예를 들어, 다음 코드는 현재 프로세스의 CPU 어핀니티를 조회하여 출력하는 예입니다.
import os
pid = os.getpid()
# 현재 프로세스의 CPU 어핀니티 조회
cpus = os.sched_getaffinity(pid)
print("CPU Affinity:", cpus)
4. 예외 처리
CPU 어핀니티 설정은 운영체제의 지원 여부에 따라 다를 수 있습니다. 또한, 올바르지 않은 CPU 번호를 지정하는 경우 예외가 발생할 수 있습니다. 따라서 os.sched_setaffinity()
와 os.sched_getaffinity()
함수를 사용할 때는 예외 처리를 해주는 것이 좋습니다.
import os
try:
pid = os.getpid()
# CPU 0과 1에 대한 어핀니티 설정
os.sched_setaffinity(pid, {0, 1})
# 현재 프로세스의 CPU 어핀니티 조회
cpus = os.sched_getaffinity(pid)
print("CPU Affinity:", cpus)
except OSError as e:
print("Error:", e)
이렇게 예외 처리를 함으로써, 어핀니티 설정 및 조회 중에 발생하는 오류를 처리할 수 있습니다.
5. 결론
Python의 os
모듈을 사용하여 프로세스의 CPU 어핀니티를 설정하고 조회할 수 있습니다. os.sched_setaffinity()
함수는 프로세스의 CPU 어핀니티를 설정하고, os.sched_getaffinity()
함수는 현재 프로세스의 CPU 어핀니티를 조회합니다. 이를 통해 다중 코어 시스템에서 프로세스의 성능 향상과 리소스 독립성을 조절할 수 있습니다.
참고 자료: