python程序作为系统运行比从终端运行慢

python程序作为系统运行比从终端运行慢,python,performance,process,raspberry-pi,systemd,Python,Performance,Process,Raspberry Pi,Systemd,我有树莓皮零WH,它只有一个核心 我有一个循环运行的程序,侦听传入的UDP数据包并处理它们。对我来说至关重要的是,在0.025秒内处理数据包和进一步的逻辑。为了更清楚,存在永久循环,即使没有数据包出现,无论发生什么,循环也不能超过0.025秒 如果我在终端上运行我的程序,我就相当成功了 sudo python3 script.py 但是,如果我使用systemd作为服务运行它,则该程序似乎没有占用足够的资源。回路未达到0.025s条件。另外,从htop看来,将我的程序作为服务运行会减少一个线程

我有树莓皮零WH,它只有一个核心

我有一个循环运行的程序,侦听传入的UDP数据包并处理它们。对我来说至关重要的是,在0.025秒内处理数据包和进一步的逻辑。为了更清楚,存在永久循环,即使没有数据包出现,无论发生什么,循环也不能超过0.025秒

如果我在终端上运行我的程序,我就相当成功了

sudo python3 script.py
但是,如果我使用systemd作为服务运行它,则该程序似乎没有占用足够的资源。回路未达到0.025s条件。另外,从htop看来,将我的程序作为服务运行会减少一个线程,我不能保证这一事实,只是快速观察

我没有使用systemd services的经验,所以可能是我的配置有问题

[Unit]
Description=App

[Service]
ExecStart=sudo /usr/bin/python3 /home/pi/script.py
WorkingDirectory=/home/pi/
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

我的问题是,这种标准行为或systemd服务的行为是否应该与从终端运行的程序相同?

作为systemd服务运行的脚本完全可能比直接从终端运行的脚本慢,这可能是由于不同的资源分配。例如,与后台处理相比,我希望从终端(即由用户显式运行)运行的脚本能够获得更高的优先级,从而获得更多的资源

但是,您可以使用以下方法为您的服务分配更多资源,包括CPU和RAM

例如,您可以尝试将CPUWeight从默认值100增加到1000

[Service]
CPUWeight = 1000

调整其他参数可能最终导致您所需的执行时间。请记住,为您的服务提供更多的资源可能会影响整个系统的性能。

作为systemd服务运行的脚本完全可能比直接从终端运行的脚本慢-可能是由于不同的资源分配。例如,与后台处理相比,我希望从终端(即由用户显式运行)运行的脚本能够获得更高的优先级,从而获得更多的资源

但是,您可以使用以下方法为您的服务分配更多资源,包括CPU和RAM

例如,您可以尝试将CPUWeight从默认值100增加到1000

[Service]
CPUWeight = 1000

调整其他参数可能最终导致您所需的执行时间。请记住,为您的服务提供更多资源可能会影响整个系统的性能。

谢谢您的回答。这对我没有多大帮助,但很清楚,这是正确的解决办法。似乎CPUWeight或CPUQuota不起作用,我甚至尝试了一些测试,只是为了确保资源控制工作正常。我检查了systemctl版本,它似乎应该支持它。尽管如此,我还是接受了你的回答,因为那正是我所期待的for@KennCal接受的anwser是正确的,但是对于非常弱的单CPU来说,它是不够的。我的解决方案是使用CPUWeight,但也使用CPUQuota,将其添加到[服务]:CPUQuota=100%,CPUWeight=1000。但这里要小心。基本上,你的systemd服务会窃取所有可用的资源,谢谢你的回答。这对我没有多大帮助,但很清楚,这是正确的解决办法。似乎CPUWeight或CPUQuota不起作用,我甚至尝试了一些测试,只是为了确保资源控制工作正常。我检查了systemctl版本,它似乎应该支持它。尽管如此,我还是接受了你的回答,因为那正是我所期待的for@KennCal接受的anwser是正确的,但是对于非常弱的单CPU来说,它是不够的。我的解决方案是使用CPUWeight,但也使用CPUQuota,将其添加到[服务]:CPUQuota=100%,CPUWeight=1000。但这里要小心。基本上,你的systemd服务会窃取所有可用资源