一个包设计问题
0

外部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) {
}
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!