|
|
|
|
@ -4,6 +4,7 @@ import (
|
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
"io" |
|
|
|
|
"runtime" |
|
|
|
|
"sig-pub/api/pb" |
|
|
|
|
"sig-pub/pkg/aside" |
|
|
|
|
"sig-pub/pkg/data" |
|
|
|
|
@ -307,8 +308,10 @@ func (t initialKlineTask) logKey() string {
|
|
|
|
|
|
|
|
|
|
// initialKline 初始化交易产品历史k线数据
|
|
|
|
|
func (svc *ExchangeGrpcServer) initialKlines(exchange *Exchange, insts []types.TradeInstance) { |
|
|
|
|
concurrent := max(8, runtime.NumCPU()*2) |
|
|
|
|
|
|
|
|
|
// 任务 channel
|
|
|
|
|
taskCh := make(chan initialKlineTask, 8) |
|
|
|
|
taskCh := make(chan initialKlineTask, concurrent) |
|
|
|
|
|
|
|
|
|
// 任务生成
|
|
|
|
|
go func() { |
|
|
|
|
@ -344,6 +347,15 @@ func (svc *ExchangeGrpcServer) initialKlines(exchange *Exchange, insts []types.T
|
|
|
|
|
} |
|
|
|
|
// 订阅完成
|
|
|
|
|
if inst.LiveMarkTs != 0 && beforeTs > inst.LiveMarkTs { |
|
|
|
|
// history status -> ok
|
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
if beforeTs > time.Now().UnixMilli() { |
|
|
|
|
if inst.LiveMarkTs != 0 { |
|
|
|
|
// history status -> ok
|
|
|
|
|
} else { |
|
|
|
|
// live status -> not ok
|
|
|
|
|
} |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -356,7 +368,7 @@ func (svc *ExchangeGrpcServer) initialKlines(exchange *Exchange, insts []types.T
|
|
|
|
|
|
|
|
|
|
// 任务消费器 8协程并行
|
|
|
|
|
wg := new(sync.WaitGroup) |
|
|
|
|
for range 11 { |
|
|
|
|
for range concurrent { |
|
|
|
|
wg.Add(1) |
|
|
|
|
go func() { |
|
|
|
|
defer wg.Done() |
|
|
|
|
|