3 个不稳定版本
使用旧 Rust 2015
0.2.1 | 2023年4月6日 |
---|---|
0.1.1 | 2019年3月6日 |
0.1.0 | 2018年11月11日 |
#6 在 #分发
用于 lateral
46KB
1K SLoC
lateral
akramer 命令行工具的克隆版。我想找个借口写 Rust,但我的创意不够,所以我就重新实现了别人的好想法。
一个简单的进程并行化工具,可以让命令行使用起来更方便。
你是否曾经尝试过使用 xargs -P -n 1
来并行运行慢速命令?结果被烧伤或者放弃了?需要使用位置参数时忘记了 -0
?需要将文本替换到命令行中?
Lateral 就是为了解决这个问题而存在的。
用法
lateral 0.1.0
A simple process parallelizer to make lives better at the commandline.
USAGE:
lateral [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-s, --socket <socket_arg> UNIX domain socket path (default $HOME/.lateral/socket.$SESSIONID)
SUBCOMMANDS:
config Change the server configuration
getpid Print pid of server to stdout
help Prints this message or the help of the given subcommand(s)
kill Kill the server with fire
run Run the given command in the lateral server
start Start the lateral background server
wait Wait for all currently inserted tasks to finish
示例
示例用法
lateral start
for i in $(cat /tmp/names); do
lateral run -- some_command $i
done
lateral wait
带注释的示例
# start a lateral server - one per session (login shell), runs 10 parallel tasks by default
lateral start
for i in $(gather list of work); do
# Hand off the command to lateral
lateral run -- my_slow_command $i
done
# Wait for all the work to be done
lateral wait
# wait stops the server when all commands are complete
# if any commands returned a non-zero status, wait returns non-zero
echo $?
这是最基本的用法,比使用 xargs 更简单。它还支持更多强大的功能。它不仅支持 xargs 一样的命令行参数,还支持文件描述符。
lateral start
for i in $(seq 1 100); do
lateral run -- my_slow_command < workfile$i > /tmp/logfile$i
done
lateral wait
要运行的命令的 stdin、stdout 和 stderr 都会传递给 lateral,因此重定向到文件也是可行的。这使得为每个任务创建日志文件变得非常简单。
并行度也可以在运行时动态调整。
lateral start -p 0 # yup, it will just queue tasks with 0 parallelism
for i in $(seq 1 100); do
lateral run -- command_still_outputs_to_stdout_but_wont_spam inputfile$i
done
lateral config -p 10; lateral wait # command output spam can commence
这也允许你在事情进行得比你想要的慢时提高并行度。低估了机器一次能处理多少工作?使用 lateral config -p <N>
增加任务的数量。结果发现你想要运行更少?降低并行度也是一样,直到正在运行的任务数量低于限制,不会启动新任务。
这个黑魔法是如何工作的?
lateral start
启动一个服务器,该服务器监听基于会话 ID 的 Unix 套接字(默认情况下)。不同登录外壳中 lateral
的每次调用都是独立的。
Unix 套接字不仅支持传递数据,还支持传递文件描述符。当调用 lateral run
时,它会通过 Unix 套接字发送命令行、环境和打开的文件描述符到服务器,它们在那里存储并排队等待执行。
依赖项
~350KB