繁体   English   中英

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

[英]python program slower running as a systemd than running it from terminal

我有raspberri pi 零 WH ,它只有1 个 Core

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

如果我从终端运行我的程序,我会相当成功

sudo python3 script.py

但是,如果我使用systemd作为服务运行它,程序似乎没有占用足够的资源。 循环未达到 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 服务是否应该与从终端运行的程序一样?

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

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

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

[Service]
CPUWeight = 1000

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

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

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

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

systemctl --user start xyz

然后,性能与您通过登录 shell 运行它一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM