指定运行python脚本的核心。 systemd

时间:2016-11-15 16:13:42

标签: python debian python-3.5 systemd

我有这个系统服务:

[Unit]
Description=Toasty
After=multi-user.target

[Service]
WorkingDirectory=/mnt/data/Toasty
User=root
Group=root
ExecStart=/usr/local/bin/python3.5 /mnt/data/Toasty/run.py
Type=idle
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

我想要的是能够为我的python代码指定一个核心来运行。

2 个答案:

答案 0 :(得分:1)

(TL;最后的DR)

您可以使用taskset命令实现此目的,该命令是util-linux包的一部分。 大多数发行版已经附带它,如果它在您的系统上不可用,请安装它:

apt-get install util-linux

使用以下命令查看进程'十六进制的CPU亲和性:

taskset -p [pid]

将返回ff的内容,等于11111111二进制或all cores

指定“c”选项(例如:taskset -cp [pid])以获取类似0-7的人类可读格式。

要将已经运行的流程固定到特定核心,请使用

taskset -p [hexmask] [pid]

ex: taskset -p 0x1 4242

taskset -cp [list] [pid]

ex: taskset -cp 0 4242

使用'c'选项,您可以使用以逗号分隔的列表或核心范围(例如:0,2,5-7)。

<强> TL; DR:

现在我们已经掌握了基础知识,让我们来看看你的用例。可以使用taskset启动固定到核心的进程,如下所示:

taskset 0x1 vlc

将启动并将vlc固定为核心0。

如果您希望仅将整个核心专用于该一个(或多个)进程,您应该查看isolcpus内核参数并将其集成到您的grub配置中。它将在启动期间保留这些核心,以供其他进程使用,除了您使用taskset分配的核心。

答案 1 :(得分:1)

尝试将ExecStartPost=/path/to/taskset -cp 1 $MAINPID添加到Install部分。

[Unit]
Description=Toasty
After=multi-user.target

[Service]
WorkingDirectory=/mnt/data/Toasty
User=root
Group=root
ExecStart=/usr/local/bin/python3.5 /mnt/data/Toasty/run.py
ExecStartPost=/path/to/taskset -cp 1 $MAINPID
Type=idle
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target