4 个版本 (2 个重大变更)

0.3.1 2023年4月6日
0.2.1 2023年4月6日
0.1.1 2018年11月11日
0.1.0 2018年11月11日

#2320命令行工具

每月下载 27 次

MIT 许可协议

79KB
2K SLoC

lateral

akramer 的命令行工具的克隆。我想找个借口写一些 Rust 代码,但我的创意不足,无法想出自己的点子,所以我就实现了别人的好想法。

一个简单的进程并行化工具,让命令行使用更便捷。

你有没有使用过 xargs -P -n 1 在尝试并行运行慢速命令?被烧焦了或放弃了?需要使用位置参数?想要将文本替换到命令行中?

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套接字将命令行、环境和打开的文件描述符发送到服务器,并在那里存储和排队以供执行。

依赖项

~8–18MB
~222K SLoC