gpt4 book ai didi

go - 如何保证Golang channel 等待数据,Stdin没有数据时程序不终止

转载 作者:IT王子 更新时间:2023-10-29 01:41:16 24 4
gpt4 key购买 nike

我有一个 Golang 程序,它对使用 TensorFlow 构建的机器学习模型进行实时预测。需要从 Stdin 逐行读取用于预测的数据,并且必须对每一行数据执行预测。数据流不是恒定的。我需要一个系统来确保每次有数据要从 Stdin 读取时调用预测方法,如果 Stdin 中没有数据,程序将等待新数据并且不会终止。

我尝试使用 channel 和选择来实现这一点,但如果标准输入中没有数据,程序就会终止。下面是代码片段:

  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))
}
}

当 Stdin 中没有新数据时,必须执行 Select 的默认情况,当 data channel 中有新数据时,必须执行 run_the_model。如何实现?

最佳答案

将您的select 置于无限循环中。

for {
select{
case <-data:
run_the_model(data)
time.Sleep(time.Second * 5)
default:
println("Waiting for data")
time.Sleep(time.Duration(math.MaxInt64))
}
}

关于go - 如何保证Golang channel 等待数据,Stdin没有数据时程序不终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com