小编Mor*_*mer的帖子

在scala中实现长轮询并使用akka播放2.0

我正在分布式环境中在Play 2.0中实现长轮询.我理解的方式是,当Play获取请求时,它应该暂停更新的待处理通知,然后转到数据库以获取新数据并重复.我开始查看Play 2.0提供的聊天示例,但它是在websocket中.此外,它看起来不像是能够分发.所以我想我会用Akka的赛车.我采用了事件流实现并使用LookupClassification复制了我自己的实现.但是我很难知道我将如何收到消息(或者就此而言,应该是订户而不是ActorRef)?

EventStream实现:https: //github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/event/EventStream.scala

scala long-polling akka playframework playframework-2.0

13
推荐指数
1
解决办法
3732
查看次数

scala持续时间:"此类不是通用的时间表示,它是针对scala.concurrent的需求进行优化的."

我正在为该scala.concurrent.duration.Duration阅读scala文档,我刚刚发现它始于:

这个类并不是时间的通用表示,它是针对scala.concurrent的需求进行优化的.

为什么这个陈述的含义?什么是更好的选择?

concurrency time scala duration java-8

9
推荐指数
2
解决办法
827
查看次数

Scala中具有Implicit参数的函数的类型

我想有一个更高阶的函数,它接受一个接受特定隐式参数的函数的参数.

更确切地说,我正在尝试创建一个函数,该函数采用Future依赖于隐式上下文的创建方法,并返回不依赖于上下文的方法.

更具体地说,让我说我有这样的事情:

def foo(a: Int)(implicit ctx: ExecutionContext): Future[Float] = future { somelongBar... }
Run Code Online (Sandbox Code Playgroud)

我想有一个像这样的方法:

def provideCtx[A](func: ExecutionContext => A): A = {
     val ctx = setupCtx
     func(ctx)
}
Run Code Online (Sandbox Code Playgroud)

但如果我调用provideCtx(foo),编译器会抱怨缺少隐式执行上下文.

我正在处理ExecutionContext的事实并不是很重要.我想要找到的是如何编写参数类型以接受具有特定类型的隐式参数的函数.我理解隐式部分是一个curryed参数,所以实际上我有一个像这样的函数:ExecutionContext => Int => Future[Float],我很确定在运行时,jvm不知道ExecutionContext是隐式的,但我不能使编译器明白了.

scala implicit currying higher-order-functions

7
推荐指数
1
解决办法
1223
查看次数

scikit-learn,为矢量化文档集添加功能

我开始使用scikit-learn,我正在尝试将一组文档转换为可以应用聚类和分类的格式.我已经看到了有关矢量化方法的详细信息,以及用于加载文件和索引其词汇表的tfidf转换.

但是,我为每个文档都有额外的元数据,例如作者,负责部门,主题列表等.

如何为向量化函数生成的每个文档向量添加要素?

python nlp machine-learning scikit-learn

6
推荐指数
1
解决办法
1642
查看次数

scalaz-stream中的Bucketed Sink

我正在尝试创建一个将流写入分段文件的接收器:当达到特定条件(时间,文件大小等)时,关闭当前输出流并打开一个新的输出流桶文件.

我检查了如何在io对象中创建不同的接收器,但是没有很多示例.于是,我就跟着怎么resourcechunkW写.我最后得到了下面的代码,为简单起见,现在只用一个表示桶Int,但最终会是某些类型的输出流.

  val buckets: Channel[Task, String, Int] = {

    //recursion to step through the stream
    def go(step: Task[String => Task[Int]]): Process[Task, String => Task[Int]] = {

      // Emit the value and repeat
      def next(msg: String => Task[Int]) =
        Process.emit(msg) ++
          go(step)


      Process.await[Task, String => Task[Int], String => Task[Int]](step)(
        next
        , Process.halt // TODO ???
        , Process.halt) // TODO ???
    }

   //starting bucket
    val acquire: Task[Int] = Task.delay {
      val startBuck = nextBucket(0) …
Run Code Online (Sandbox Code Playgroud)

scala scalaz scalaz-stream

6
推荐指数
1
解决办法
395
查看次数