1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年11月11日 |
---|
#36 in #listener
23 每月下载量
在 lateral 中使用
9KB
220 行
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 -<N>
来增加任务的数量。结果是你想运行更少?减少并行性也行 - 不会启动新任务,直到运行的数目低于限制。
这个黑魔法是如何工作的?
lateral start
启动一个服务器,该服务器监听一个基于你的会话ID的Unix套接字(默认情况下)。在不同登录shell中调用 lateral
的每个实例都是独立的。
Unix套接字支持的数据传递功能不仅限于数据:它们还支持文件描述符的传递。当调用lateral run
时,它将通过Unix套接字将命令行、环境和打开的文件描述符发送到服务器,在那里它们被存储并排队运行。
依赖项
~0.6–1MB
~14K SLoC