我正在开发一个程序来实时从传感器捕获数据。这个程序是在我之前用 python 3 编写的。我的任务是让程序高效运行,否则会有数据丢失。它可以在 Linux 上运行,但不能在 Windows 10(同一台计算机)上运行。它必须在windows下工作,因为这里只使用windows电脑。
现在我想将进程优先级和输入/输出优先级设置为高以获得更好的性能。我这样做如下:文件Hauptprogramm.py(英文翻译:main_program.py)
import psutil
... # (importing and doing some other stuff)
if PRIO_SETTINGS["enProcessPrioCtrl"] == True:
p = psutil.Process()
if psutil.LINUX: #detect if OS Windows or Linux
from prio_settings_lin import PRIO_SETTINGS_LIN
p.nice(PRIO_SETTINGS_LIN["linux_prio_value"])
p.ionice(PRIO_SETTINGS_LIN["linux_io_prio_class"])
else:
from prio_settings_win import PRIO_SETTINGS_WIN
p.nice(PRIO_SETTINGS_WIN["windows_prio_class"])
p.ionice(PRIO_SETTINGS_WIN["windows_io_prio_class"])
... # (contiunue with some other stuff)
设置从两个文件加载:prio_seting_lin.py:
import psutil
PRIO_SETTINGS_LIN = {
"linux_prio_value" : -19,
"linux_io_prio_class" : psutil.IOPRIO_CLASS_RT
}
或 prio_settings_win.py:
import psutil
PRIO_SETTINGS_WIN = {
"windows_prio_class" : psutil.REALTIME_PRIORITY_CLASS,
"windows_io_prio_class" : psutil.IOPRIO_HIGH
}
在 linux 下,使用 sudo python3 mainprogram.py 可以毫无问题地执行程序。但是当我在 windows 下的 cmd.exe 提示符下运行它时,它总是变成
psutil.AccessDenied: psutil.AccessDenied (pid=8288)
. 即使我在 antministrator 权限下运行命令提示符,也会发生这种情况。如果我从文件 Hauptprogamm.py 中注释掉 p.ionice(PRIO_SETTINGS_WIN["windows_io_prio_class"]) 行,它可以工作,但是性能仍然不够好。
我能做什么?当需要访问串行端口时,iopriorety 是否会做任何事情?
我不想在 c 中再次对所有内容进行编程。
感谢您的回答。