benmorel/parallel

以固定速率并行运行命令的命令行脚本

资助包维护!
BenMorel

0.1.3 2022-03-18 22:34 UTC

This package is auto-updated.

Last update: 2024-09-19 03:52:53 UTC


README

一个以固定速率并行运行命令的命令行脚本。

Latest Stable Version License

这是什么?

你是否需要每秒执行命令 n 次,允许这些命令在第一个命令执行完成之前开始第二个命令?这个工具正是为此而生。

作为安全措施,你必须指定同时运行的最大进程数。如果命令执行时间过长,且达到最大进程数,则下一次执行将跳过,直到有空位。

何时有用?

假设你有一个查询远程API的脚本。在这个API上,你的请求限制是每秒5次。

你不能简单地并行运行5个脚本实例

  • 如果API响应时间低于1秒,你需要暂停每个脚本以确保它至少运行1秒
  • 如果API响应时间大于1秒,你将无法完全使用你的请求配额

Parallel.phar可以每秒启动5个你的脚本实例,无论已经运行了多少个,但不超过你指定的限制。这个限制是为了避免在出现突然的网络问题、减速或锁定时造成服务器和网络拥塞。

如何使用它?

确保你已经安装了PHP,并下载 parallel.phar

wget https://raw.githubusercontent.com/BenMorel/parallel/0.1.3/bin/parallel.phar
chmod +x parallel.phar

或者,你可以使用Composer安装它。

然后运行

./parallel.phar Rate Concurrency Command [...]

其中

  • Rate 是每秒的执行次数
  • Concurrency 是最大并发进程数
  • Command 是要执行的命令,包括其可选参数

示例

./parallel.phar 10 20 date "+%X %N"

这将每秒输出10行,例如

04:27:12 PM 031273903
04:27:12 PM 121497348
04:27:12 PM 221800224
04:27:12 PM 322584008
04:27:12 PM 423034796
...

在这个例子中,不能同时运行超过20个进程;在我们的date示例中,由于执行非常快,这并不重要,但对于可能调用远程API的长时间运行的脚本来说,这将是重要的。

要停止,只需按下 Ctrl + C