【发布时间】:2014-05-30 16:59:20
【问题描述】:
假设我有一个可执行文件batch_processor,它从标准输入读取数据行并为每一行输入执行一个复杂的任务。如果我的数据在一个名为 data.txt 的文件中,我可以通过键入以下内容来运行此作业:
bacth_processor < data.txt
或:
cat data.txt | batch_processor
在每种情况下,batch_processor 都会尽可能快地使用源数据。
现在,假设我想有意限制这个过程。如果我的文件有 100,000 行,并且我希望这项工作需要 24 小时来减少对系统的影响(每秒超过 1 行),是否可以在管道中插入一些东西来人为地增加延迟每行之间?
【问题讨论】:
-
您的目标是“减少对系统的影响”,还是让工作耗时 24 小时?第一个可以通过简单地以低优先级运行来实现,这意味着只要没有更高优先级的东西想要运行,它就会尽可能快地运行,但如果系统是大多是闲置的。秒可以通过在每条线之间插入延迟来近似,但是如果每条线的时间要求差异很大,则只能近似结果...
-
@twalberg 我会说更多“让工作需要 24 小时”。想象一下
batch_processor向 Twitter API 发出一堆请求。你不会希望每 y 分钟点击它超过 x 次,否则你会因为超过他们的速率限制而被判入狱。
标签: bash shell pipe stdin throttling