gpt4 book ai didi

go - 在需要时中断 anaconda 的推特流

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:08 26 4
gpt4 key购买 nike

我有一些代码可以收听包含特定单词(此处为“obama”的示例)的 Twitter 实时推文,并使用 anaconda 包 (https://github.com/ChimeraCoder/anaconda) 打印它们。

我希望能够在我调用其他函数时在给定时刻关闭推文流。为了做到这一点,我尝试了一个名为“stop”的 channel ,只要它收到一个值,程序就会停止监听流。

我尝试了以下代码在执行 10 秒后停止流:

    func main() {
trackingArray := []string{ "obama"}

anaconda.SetConsumerKey(consumerKey)
anaconda.SetConsumerSecret(consumerSecret)

api := anaconda.NewTwitterApi(accessToken, accessTokenSecret)

stream := api.PublicStreamFilter(url.Values{
"track": trackingArray,
})

stop := make(chan int)

for {
select {
case v := <- stream.C :
tweet, ok := v.(anaconda.Tweet)
if !ok {
/* handle incorrect type */
continue
}

fmt.Print(tweet)

case <- stop :
stream.Stop()
break

}
}

go After(&stop)
}

func After(stop *chan int){
time.Sleep(time.Second * 10)
*stop <- 1
}

此代码根本不起作用,流永远不会停止...

我的停止 channel 应该是可重复使用的,因为这背后的目标是它作为一个开/关开关来开始/停止收听 Twitter 的流。

这可能是一个新手问题,但我认为我已经了解 channel 是如何工作的,但我有点迷路了……提前感谢您的宝贵时间!

最佳答案

您正在启动 goroutine go After(&stop) after for 循环,goroutine 需要中断该循环。这导致循环永远不会中断,goroutine 也永远不会启动。

要修复它,只需将 go After(&stop) 放在 for 循环之前即可。

关于go - 在需要时中断 anaconda 的推特流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48706603/

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