0

我正在开发一个程序来实时从传感器捕获数据。这个程序是在我之前用 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 中再次对所有内容进行编程。

感谢您的回答。

4

0 回答 0