远程计算机上的并行 Python 脚本

远程计算机上的并行 Python 脚本

如同线程,我有一台具有 8 个核心的远程计算机,我想用它来并行运行脚本(每个核心一次 1 个脚本)。

但是,我没有多个 bash 脚本,只有一个 Python3 脚本,我想用不同的输入运行它。我尝试过parallel python3 -c main.py input*parallel -j 100% python3 -c main.py ::: input*parallel python3 main.py input*没有任何效果。

确切的错误消息是:

parallel: Error: -g has been retired. Use --group.
parallel: Error: -B has been retired. Use --bf.
parallel: Error: -T has been retired. Use --tty.
parallel: Error: -U has been retired. Use --er.
parallel: Error: -W has been retired. Use --wd.
parallel: Error: -Y has been retired. Use --shebang.
parallel: Error: -H has been retired. Use --halt.
parallel: Error: --tollef has been retired. Use -u -q --arg-sep -- and --load for -l.

我不明白这与我的输入有何关系。我没有使用任何这些选项。

我对 Unix 相当陌生,缺乏经验,我自己或谷歌搜索都无法让它工作。任何帮助表示赞赏。我是否必须编写一个 shell 脚本来帮助我解决这个问题?

答案1

问题实际上是如何在远程计算机上安装并行(运行最新的 Ubuntu)。我遇到了一个线解决我的问题:sudo rm /etc/parallel/config在 Ubuntu 上安装后运行以删除导致我的错误消息的配置。

我用来并行运行具有不同输入的 python 脚本的命令是:parallel -j 100% python3 main.py ::: inputs*

尽管如此,还是感谢所有提供帮助的人!

答案2

您可以通过将每个脚本分配给特定核心来做到这一点,taskset 首先您需要使用ps aux | grep <scriptname, input>或使用获取脚本的进程ID pgrep -f <scriptname, input>,然后将其传递给taskset这样的taskset -pc 0 $pid,这会将进程分配给核心1。有关更多信息taskset http://linuxcommand.org/man_pages/taskset1.html

答案3

我不确定您从哪里收到错误消息。通常语法是

parallel -j 100% python3 -c main.py ::: input*

例如,如果您只有 2 个文件,inputa, inputb则它会并行运行

python3 -c main.py inputa
python3 -c main.py inputb

如果您有 8 个 cpu 核心,并且有 10 个input*文件,则该-j 100%参数使得在开始时一次仅并行运行 8 个命令。当一个命令完成后,将运行下一个命令,直到所有 10 个命令都完成。我们依靠正常的 Linux 调度将每个命令分配给单独的 cpu。

相关内容