benmorel / parallel
以固定速率并行运行命令的命令行脚本
0.1.3
2022-03-18 22:34 UTC
Requires
- symfony/process: ^5.4
This package is auto-updated.
Last update: 2024-09-19 03:52:53 UTC
README
一个以固定速率并行运行命令的命令行脚本。
这是什么?
你是否需要每秒执行命令 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。