python 作为 systemd 的程序 运行 比来自终端的 运行 慢

python program slower running as a systemd than running it from terminal

我有 raspberri pi 零 WH,它只有 1 个核心

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

如果我从终端 运行 我的程序

我就相当成功了
sudo python3 script.py

但是,如果我 运行 它与 systemd 作为 service,似乎程序没有足够资源。循环未达到 0.025s 条件。此外,从 htop 看来,运行将我的程序作为服务减少了一个线程(我不能保证这一事实,只是快速观察)。

我没有使用 systemd 服务的经验,所以问题可能出在我的配置上

[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 服务是否应该与终端程序 运行ned 的行为相同?

作为 systemd 服务的脚本 运行 完全有可能比直接来自终端要慢 - 可能是由于不同的资源分配。例如,我希望来自终端的脚本 运行(即用户明确地)获得更高的优先级,因此与后台处理相比可以获得更多的资源。

但是,您可以使用 systemd.resource-control 为您的服务分配更多资源,包括 CPU 和 RAM。

例如,您可以尝试将 CPU权重从默认值 100 增加到 1,000。

[Service]
CPUWeight = 1000

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

我遇到了类似的问题并通过创建“user.service”解决了这个问题。 将单元文件保存在:

/home/$USER/.config/system/user/<xyz>.service

然后通过以下方式启动它:

systemctl --user start xyz

性能与您 运行 通过登录 shell 一样。