scalaz-stream基于计算值消耗流

时间:2016-03-11 17:50:30

标签: scala scalaz-stream

我有两个流,我希望能够根据每x秒运行一次的计算只使用一个。

我认为我基本上需要创建第三个tick流 - 类似于every(3.seconds) - 进行计算,然后在其他两个之间进行切换。

我有点被困在这里(而且我只是刚刚开始使用scalaz-stream)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我们有几种方法可以解决这个问题。接近它的一种方法是使用awakeEvery。具体示例请参见here

要简要描述一下这个例子,请考虑我们希望每隔5秒查询一次Twitter,然后获取推文并进行情绪分析。我们可以按如下方式组成这个管道:

val source = 
    awakeEvery(5 seconds) |> buildTwitterQuery(query) through queryChannel flatMap {
        Process emitAll _ 
    }

请注意,queryChannel可以说明如下。

def statusTask(query: Query): Task[List[Status]] = Task {
      twitterClient.search(query).getTweets.toList
}

val queryChannel: Channel[Task, Query, List[Status]] = channel lift statusTask

如果您有任何疑问,请与我们联系。如前所述,有关完整示例,请参阅this

我希望它有所帮助!