mon*_*ing 13 parallel-processing bash system systems-programming
我有一个包含我想要运行的命令行的文件.该文件包含大约2,000行.
我有8个核心可用.是否可以解析文件并启动8个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望这一直持续到文件结束.
Ste*_*eve 37
使用GNU并行.它是一个非常强大的工具,大约20个左右的Linux发行版存在官方软件包.那是什么?你有理由不能使用它吗?这是一个简单的示例,展示了如何并行运行命令列表或文件:
内容jobs.txt
:
sleep 1; echo "a"
sleep 3; echo "b"
sleep 2; echo "c"
Run Code Online (Sandbox Code Playgroud)
命令:
time parallel :::: jobs.txt
Run Code Online (Sandbox Code Playgroud)
结果:
a
c
b
real 0m3.332s
user 0m0.170s
sys 0m0.037s
Run Code Online (Sandbox Code Playgroud)
笔记:
如果您希望保持顺序与输入相同,请将-k
标志传递给GNU parallel.
如果您有八个以上内核并且只希望处理八个内核,请添加-j 8
到args列表中.
该手册页是很好看,但如果你尚未阅读本教程中我会极力推荐的一次性投资.
Tod*_*obs 20
您可以使用xargs读入文件,同时将最大进程数限制为可用核心数.例如:
cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
--max-procs=$cores \
--replace \
--verbose \
/bin/sh -c "{}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18336 次 |
最近记录: |