所以我有一个请求REST API的函数,它接受两个参数:实例和日期。我给出了一个实例列表和一系列日期,需要使用两个for循环进行迭代。一个限制是一次只能请求一个实例。
我尝试使用&
和wait
,我的伪代码看起来像这样。
for each date:
for each instance:
do-something "$date" "$instance" &
done
wait
done
这实际上非常有效,因为一次只请求一个实例,并且只在处理完所有实例时才进行,因此不会同时请求实例。
问题是某些实例的某些请求需要很长时间,因此之前处理过的其他实例都是空闲的。我怎么解决这个问题?
答案 0 :(得分:1)
定义一个函数,它将按顺序处理每个日期的给定实例:
for_each_date () {
instance=$1
shift
for d in "$@"; do
some_command "$d" "$instance"
done
}
现在,为每个实例生成一个后台进程来运行此函数。
dates=(2015-07-21 2015-07-22 2015-07-23) # For example
instances=(inst1 inst2 inst3)
for instance in "${instances[@]}"; do
for_each_date "$instance" "${dates[@]}" &
done
wait
每个后台作业将针对不同的实例运行some-command
,并且一次不会运行多个进程,因此您满足第一个约束。同时,for_each_date
在旧实例完成后立即为其实例启动新请求,使您的计算机尽可能保持忙碌。
答案 1 :(得分:1)
使用GNU Parallel,您可以:
'react-facebook-login/dist/facebook-login-render-props'