Files
gostock/internal/logic/strategy/boot.go
yanweidong e6821c54e2 fix bug
2026-02-04 00:31:10 +08:00

50 lines
1.1 KiB
Go

package strategy
import (
"log"
"sync"
"git.apinb.com/quant/gostock/internal/impl"
"git.apinb.com/quant/gostock/internal/models"
)
func Boot() {
InitCacheByAll()
}
func BootAiStart(key string, ymd int) {
var datas []models.StratModel
err := impl.DBService.Where("strat_key=? and ymd=? and ai_score=0", key, ymd).Find(&datas).Error
if err != nil {
panic(err)
}
// Create a buffered channel with a capacity of 20 to act as a semaphore
semaphore := make(chan struct{}, 20)
var wg sync.WaitGroup
for _, row := range datas {
wg.Add(1)
// Acquire a slot in the semaphore
semaphore <- struct{}{}
go func(row models.StratModel) {
defer wg.Done()
// Release the slot in the semaphore when done
defer func() { <-semaphore }()
BootAiTask(row.ID, row.Code, &wg)
}(row)
}
wg.Wait()
}
func BootAiTask(id uint, code string, wg *sync.WaitGroup) {
defer wg.Done()
result, err := AiAnalysis(code)
if err != nil {
log.Println("ERROR BootAiTask", err.Error())
return
}
impl.DBService.Model(&models.StratModel{}).Where("id=?", id).Updates(result)
}