Skip to content

Commit

Permalink
并发search
Browse files Browse the repository at this point in the history
  • Loading branch information
axiaoxin committed Jul 18, 2021
1 parent 830fbb3 commit 5b98922
Showing 1 changed file with 37 additions and 17 deletions.
54 changes: 37 additions & 17 deletions core/searcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,25 +31,36 @@ func NewSearcher(ctx context.Context) Searcher {

// SearchStocks 按股票名或代码搜索股票
func (s Searcher) SearchStocks(ctx context.Context, keywords []string) (map[string]models.Stock, error) {
var wg sync.WaitGroup
var mu sync.Mutex
kLen := len(keywords)
if kLen == 0 {
return nil, errors.New("empty keywords")
}
// 根据关键词匹配股票代码
matchedResults := []sina.SearchResult{}
for _, kw := range keywords {
searchResults, err := datacenter.Sina.KeywordSearch(ctx, kw)
if err != nil {
logging.Errorf(ctx, "search %s error:", kw, err.Error())
continue
}
if len(searchResults) == 0 {
logging.Warnf(ctx, "search %s no data", kw)
continue
}
logging.Debugf(ctx, "search results:%+v, %s matched", searchResults, searchResults[0])
matchedResults = append(matchedResults, searchResults[0])
wg.Add(1)
go func(kw string) {
defer func() {
wg.Done()
}()
searchResults, err := datacenter.Sina.KeywordSearch(ctx, kw)
if err != nil {
logging.Errorf(ctx, "search %s error:", kw, err.Error())
return
}
if len(searchResults) == 0 {
logging.Warnf(ctx, "search %s no data", kw)
return
}
logging.Debugf(ctx, "search results:%+v, %s matched", searchResults, searchResults[0])
mu.Lock()
matchedResults = append(matchedResults, searchResults[0])
mu.Unlock()
}(kw)
}
wg.Wait()
if len(matchedResults) == 0 {
return nil, fmt.Errorf("无法获取对应数据 %v", keywords)
}
Expand All @@ -64,13 +75,22 @@ func (s Searcher) SearchStocks(ctx context.Context, keywords []string) (map[stri
}
results := map[string]models.Stock{}
for _, stock := range stocks {
mstock, err := models.NewStock(ctx, stock)
if err != nil {
logging.Errorf(ctx, "%s new models stock error:%v", stock.SecurityCode, err.Error())
continue
}
results[stock.SecurityCode] = mstock
wg.Add(1)
go func(stock eastmoney.StockInfo) {
defer func() {
wg.Done()
}()
mstock, err := models.NewStock(ctx, stock)
if err != nil {
logging.Errorf(ctx, "%s new models stock error:%v", stock.SecurityCode, err.Error())
return
}
mu.Lock()
results[stock.SecurityCode] = mstock
mu.Unlock()
}(stock)
}
wg.Wait()
return results, nil
}

Expand Down

0 comments on commit 5b98922

Please sign in to comment.