如同这线程,我有一台具有 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。