如何在命令行中循环执行mrjob脚本以测试不同核心数性能?
用命令行循环执行mrjob性能测试的方法
当然可以!不用每次手动重复输入命令太省心了,根据你使用的操作系统和Shell环境,这里有几种直接在命令行写循环的方案:
Linux/macOS(Bash Shell)
如果用的是Bash(大部分Linux发行版和macOS默认Shell),可以用for循环遍历你要测试的核心数:
基础循环执行
for cores in 1 2 3 4 5; do python example_script.py --num-cores $cores done
这个命令会依次用1核、2核……5核运行你的脚本。
保存输出到日志文件(推荐)
如果需要记录每次测试的输出和性能数据,可以把结果重定向到单独的日志文件,方便后续分析:
for cores in 1 2 3 4 5; do echo "=== Starting test with $cores cores at $(date) ===" > output_${cores}cores.log python example_script.py --num-cores $cores >> output_${cores}cores.log 2>&1 done
这里2>&1是把错误输出也同步写入日志文件,避免遗漏报错信息。
Windows环境
命令提示符(Cmd)
在Cmd里用for循环的写法是:
for %c in (1, 2, 3, 4, 5) do python example_script.py --num-cores %c
注意:如果是写在批处理(.bat)文件里,要把%c改成%%c。
PowerShell
PowerShell的写法更灵活,用管道和ForEach-Object:
1..5 | ForEach-Object { python example_script.py --num-cores $_ }
同样可以保存日志:
1..5 | ForEach-Object { "=== Starting test with $_ cores at $(Get-Date)" | Out-File "output_${_}cores.log" -Append python example_script.py --num-cores $_ | Out-File "output_${_}cores.log" -Append }
小提示
- 如果不需要连续的核心数(比如测试1、3、5核),只要修改循环里的数字列表就行,比如Bash里改成
for cores in 1 3 5; do ... - 如果脚本运行时间较长,可以在循环里加入时间记录,方便后续统计每个核心数下的运行耗时。
内容的提问来源于stack exchange,提问作者F.D
相关产品推荐
相关产品推荐

