J'ai un programme Golang qui fait des prédictions en temps réel sur un modèle d'apprentissage automatique construit avec TensorFlow. Les données pour la prédiction doivent être lues ligne par ligne depuis Stdin et la prédiction doit être effectuée sur chaque ligne de données. Le flux de données n'est pas constant. J'ai besoin d'un système qui garantit que chaque fois qu'il y a des données à lire à partir de Stdin, la méthode de prédiction est invoquée et s'il n'y a pas de données dans Stdin, le programme attend de nouvelles données et ne se termine pas.
J'ai essayé d'y parvenir en utilisant les canaux et le select, mais s'il n'y a pas de données dans le Stdin, le programme se termine. Voici l'extrait de code :
func run_the_model(in <-chan string) {
go func(){
...
...
...
//Fetch the model
//Run the prediction
//print the result on StdOut
}()
}
func main() {
data := make(chan string)
// read data from Stdin
go func() {
scan := bufio.NewScanner(os.Stdin)
for scan.Scan() {
data <- scan.Text()
}
}()
time.Sleep(time.Second * 5)
select{
case <-data:
run_the_model(data)
time.Sleep(time.Second * 5)
default:
println("Waiting for data")
time.Sleep(time.Duration(math.MaxInt64))
}
}
Lorsqu'il n'y a pas de nouvelles données dans Stdin, le cas par défaut de Select doit être exécuté et lorsqu'il y a de nouvelles données dans le fichier data
le canal run_the_model
doit être exécuté. Comment y parvenir ?