在 Python 代码中可以直接通过 psutil
模块 或 系统调用 来设置进程优先级,无需依赖终端命令。以下是具体方法和示例:
1. 使用 psutil
模块(跨平台推荐)
psutil
是一个跨平台库,支持 Windows、Linux 和 macOS。通过其 nice()
方法可以修改进程优先级:
python
import psutil
# 获取当前进程
current_process = psutil.Process()
# 获取当前优先级(Linux/Unix返回nice值,Windows返回优先级类)
current_priority = current_process.nice()
print(f"当前优先级: {current_priority}")
# 设置新优先级(不同系统参数不同)
# Windows 示例:设置为高优先级
current_process.nice(psutil.HIGH_PRIORITY_CLASS) # Windows
# Linux/macOS 示例:设置nice值为-10(需root权限)
current_process.nice(-10) # Linux/Unix
- Windows :使用
psutil
提供的常量(如HIGH_PRIORITY_CLASS
、BELOW_NORMAL_PRIORITY_CLASS
等)。 - Linux/Unix :直接传入
nice
值(范围通常为 -20 到 19,值越小优先级越高)。
2. 使用 os
模块调用系统命令(需平台适配)
通过 os.system
调用 renice
(Linux/Unix)或 wmic
(Windows)命令:
python
import os
import psutil
pid = psutil.Process().pid
# Linux/Unix: 设置nice值为-10(需sudo权限)
os.system(f"sudo renice -10 -p {pid}")
# Windows: 设置优先级为高(需管理员权限)
os.system(f"wmic process where ProcessId={pid} CALL setpriority 256")
- 注意:此方法依赖系统命令,且需要权限,跨平台兼容性较差。
3. Windows 专用方法(pywin32
)
若需更底层操作,可使用 pywin32
直接调用 Windows API:
python
import win32api
import win32process
import win32con
# 获取当前进程句柄
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, win32api.GetCurrentProcessId())
# 设置优先级为高
win32process.SetPriorityClass(handle, win32process.HIGH_PRIORITY_CLASS)
- 优先级常量 :
IDLE_PRIORITY_CLASS
,HIGH_PRIORITY_CLASS
,REALTIME_PRIORITY_CLASS
等。
注意事项
- 权限要求 :提高优先级通常需要管理员/root 权限(如 Linux 下设置负
nice
值)。 - 跨平台差异 :不同系统优先级范围和实现方式不同,建议优先使用
psutil
简化兼容性问题。