7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수
1. int = SetThreadAffinityMask(hThread, ThreadAffinityMask )
쓰레드의 CPU 선호도를 설정합니다. 선호도란 멀티 프로세서의 경우 어떤 CPU에 작업을 할당할 지를 말합니다.
위의 이미지는 작업관리자 > 프로세스 > 선호도 설정의 창입니다. 여기서 CPU를 설정하는 것처럼 이 함수를 통해 설정이 가능합니다. 물론 이건 프로세스의 CPU 선호도를 보여주는 거라 쓰레드도 이렇다 라고 참조만 해주시면 되겠습니다.
인자로는 hThread : PyHANDLE, ThreadAffinityMask : int 가 있습니다.
hThread: 쓰레드의 핸들값입니다.
ThreadAffinityMask: 설정할 CPU 값으로 비트마스크 형식으로 되어있습니다. (CPU0=1, CPU1=2, CPU2=4...., 만약 CPU0,1 둘다 설정하기 위해서는 1+2=3 값을 넣으면 됩니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.
리턴값은 기존의 AffinityMask 값입니다.
2. int = SetThreadIdealProcessor(handle, dwIdealProcessor )
쓰레드가 가능한 경우 이 프로세서에서 실행됬으면 좋겠다. 라고 설정하는 함수입니다.
인자로는 handle : PyHANDLE, dwIdealProcessor : int 가 있습니다.
handle: 쓰레드의 핸들값입니다.
dwIdealProcessor: 이상적인 프로세서로 지정할 값입니다. 0부터 시작하며 CPU0=0, CPU1=1, CPU2=..., AffinityMask와 달리 CPU를 하나만 지정할 수 있습니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.
- win32process.MAXIMUM_PROCESSORS: 이 값을 넣을 경우, 현재 지정된 IdealProcessor 값을 반환하기만 하며, 설정하지는 않습니다.
리턴값은 기존의 IdealProcessor 값입니다.
import win32process
import win32api
import win32gui
import win32event
import win32con
def cnt1():
i = 0
return 3
q = tuple()
res1 = win32process.beginthreadex(None, 0, cnt1, q, win32process.CREATE_SUSPENDED)
preThreadAffMask1 = win32process.SetThreadAffinityMask(res1[0], 1)
preThreadAffMask2 = win32process.SetThreadAffinityMask(res1[0], preThreadAffMask1)
#bit 1248...
#cpu 0123...
preThreadIdealPrc1 = win32process.SetThreadIdealProcessor(res1[0], 1)
preThreadIdealPrc2 = win32process.SetThreadIdealProcessor(res1[0], 0)
preThreadIdealPrc3 = win32process.SetThreadIdealProcessor(res1[0], win32process.MAXIMUM_PROCESSORS)
print(f"pre ThreadAffMask1 : {preThreadAffMask1}")
print(f"pre ThreadAffMask2 : {preThreadAffMask2}")
print(f"pre ThreadIdealProcessor1 : {preThreadIdealPrc1}")
print(f"pre ThreadIdealProcessor2 : {preThreadIdealPrc2}")
print(f"pre ThreadIdealProcessor3 : {preThreadIdealPrc3}")
win32process.ResumeThread(res1[0])
win32event.WaitForSingleObject(res1[0], 3000)
실행결과입니다.
'pywin32 > win32process' 카테고리의 다른 글
9. [pywin32] ExitProcess & TerminateProcee 및 관련 함수 (0) | 2020.12.25 |
---|---|
8. [pywin32] CreateProcess 및 기타 함수 (0) | 2020.12.24 |
6. [pywin32] SetThreadPriority & Boost 함수 (0) | 2020.12.22 |
5. [pywin32] GetThread... 관련 함수 (0) | 2020.12.21 |
4. [pywin32] ResumeThread 함수 (0) | 2020.10.27 |