一个包设计问题

外部API单次访问速度比较慢,有很多情况下可以将访问任务拆开并行访问,最后合并结果。比如获取商品信息的外部API,一次最多支持同时取50个商品,如果我要获取300个,可以拆成6组50个的同时访问以加快访问速度。
用golang设计一个类来实现这个需求,大致的接口如下:

type ParallelTask struct {
    Done    <-chan struct{} // 任务完成通知channel
}
// 执行子任务的函数原型
// batchItemList 子任务参数Slice
// params 附加参数
// result 子任务的返回值
type WorkFun func(batchItemList []interface, params interface{}...) (result []interface{}, err error)
// 创建一新的并行任务
// name 任务名
// parallelCount 并行数(即多少个goroutine同时在执行这个任务)
// batchSize 单次任务访问的item数量,
// itemList 总的任务信息,它应该是一个Slice,这里写成interface{}类型是为了兼容所有的不同Slice类型
// params 其它参数
func New(name string, parallelCount, batchSize int, worker WorkFun, itemList interface{}, params interface{}...) *ParallelTask {
}
// 执行任务
func (t *ParallelTask) Run() *ParallelTask {
}
// 得到并行任务的执行结果
// duration是等待的时间,为0表示无限等待,如果超时后任务没有完成,需要返回相应的错误提示
// result 为并行任务成功完成后的返回值,没有返回值可以返回nil
func (t *ParallelTask) GetResult(duration time.Duration) (result []interface{}, err error) {
}
讨论数量: 1
taadis

你倒是说啥问题哟...

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!