在需要时中断 anaconda 的推特流
Breaking anaconda's twitter stream when needed
我有一些代码可以收听包含特定单词的 Twitter 实时推文(此处为 "obama" 示例)并使用 anaconda 包打印它们 (https://github.com/ChimeraCoder/anaconda)。
我希望能够在我调用其他函数时在给定时刻关闭推文流。为了做到这一点,我尝试创建一个名为 "stop" 的通道,只要它收到一个值,程序就会停止监听流。
我尝试了以下代码在执行 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
}
此代码根本不起作用,流永远不会停止...
我的停止频道应该是可重复使用的,因为这背后的目标是它作为 on/off 切换到 start/stop 收听 Twitter 的流。
这可能是一个新手问题,但我认为我已经了解频道的工作原理,但我有点迷路了...
提前感谢您的宝贵时间!
您正在 go After(&stop)
for
循环之后启动 goroutine,goroutine 需要中断该循环。这导致循环永远不会中断并且 gouroutine 永远不会启动。
要修复它,只需将 go After(&stop)
放在 for
循环之前。
我有一些代码可以收听包含特定单词的 Twitter 实时推文(此处为 "obama" 示例)并使用 anaconda 包打印它们 (https://github.com/ChimeraCoder/anaconda)。
我希望能够在我调用其他函数时在给定时刻关闭推文流。为了做到这一点,我尝试创建一个名为 "stop" 的通道,只要它收到一个值,程序就会停止监听流。
我尝试了以下代码在执行 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
}
此代码根本不起作用,流永远不会停止...
我的停止频道应该是可重复使用的,因为这背后的目标是它作为 on/off 切换到 start/stop 收听 Twitter 的流。
这可能是一个新手问题,但我认为我已经了解频道的工作原理,但我有点迷路了... 提前感谢您的宝贵时间!
您正在 go After(&stop)
for
循环之后启动 goroutine,goroutine 需要中断该循环。这导致循环永远不会中断并且 gouroutine 永远不会启动。
要修复它,只需将 go After(&stop)
放在 for
循环之前。