问题标签 [iterate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1360 浏览

scala - 是否有类似 Iteratee 的概念从多个来源提取数据?

可以使用流(惰性列表)从多个(为简单起见说两个)源中按需提取。Iteratees 可用于处理来自单一来源的数据。

是否有类似 Iteratee 的功能概念来处理多个输入源?我可以想象一个 Iteratee 的状态信号,它想要从哪个源中提取。

0 投票
1 回答
2697 浏览

scala - 使用 Play2 / Scala 通过 Iteratee 将文件上传流转发到 S3

我已经阅读了一些关于通过 Iteratee 将文件发送到 S3 的可能性的内容,这似乎允许在我们收到文件时发送 S3 文件块,并避免大文件的 OutOfMemory 例如。

我发现这篇 SO 帖子可能几乎是我需要做的: Play 2.x : Reactive file upload with Iteratees 我真的不明白怎么做,或者它是否真的在 Play 2.0.2 中可用(因为 Sadek Brodi 说 foldM 仅在 Play 2.1 中可用)

对于阅读过一些关于 Iteratees 的博客但还不是 Scala/Play2 专家的人,有人可以用简单的方式解释一下吗?

我什至不知道我是否应该使用多部分正文解析器或类似的东西,但我知道的一件事是我不明白这段代码在做什么:


顺便说一句,与使用经典的 Java InputStream / OutputStream 相比,内存消耗会有什么不同。我实际上能够以非阻塞方式将 500mb 文件转发到 S3,内存消耗非常低,不使用 Iteratees,使用 Java + AsyncHttpClient + Grizzly(但我想它也适用于 Netty)。

那么使用Iteratee有什么好处呢?

我可以看到的一个区别是,我获得并转发到 S3 的 InputStream 在我的情况下由一个临时文件支持(这是一种 CXF 行为),因此它可能不像 Play Iteratee 那样具有反应性

但是对于 Iteratee,如果 Enumerator 产生连接接收到的字节并通过 Iteratee 将它们转发到 S3,那么如果与 S3 的连接不好并且字节不能非常快速地转发,那么“待处理”字节存储在哪里?

0 投票
0 回答
75 浏览

scala - 大文件的 Play2 迭代器和枚举器流式传输失败

可能重复:
Play2 Framework 代理向客户端流式传输内容在流式传输完成后保持连接打开

我正在将一个 11mb 的文件从 Web 服务流式传输到客户端。这本质上是一个直通代理。这是我的代码:

我称之为:

对于慢速服务,这很好用,我得到了整个文件。对于快速服务,我只得到文件的一小部分(大小不同,顺便说一句),其余的图像被切断。如果图像是 11mb,在 .close() 方法终止流之前,我可能只会得到 2mb。

我知道 Iteratee 获取了所有数据(我在打印出来时看到了它),但是,似乎 Enumerator 上的 .close() 调用运行得太快了,并且在 interatee 能够之前切断了枚举器填补;填写(表格,资料。

我有几个问题:

  1. 这是做代理的正确方法吗?我首先用传统的 Java IO 流来做这个,它工作正常,但不是惯用的或非阻塞的

  2. 如果这是解决此问题的合理方法,那么 Enumerator.close() 方法应该去哪里?.onRedeem 与 .orTimeout 有同样的问题

谢谢!

0 投票
3 回答
1485 浏览

scala - 流式传输完成后,Play2 Framework 代理流式传输内容到客户端保持连接打开

下面的代码确实流回客户端,我收集的是比使用 Java 的 IO 流更惯用的方式。但是,它有一个问题:流完成后连接保持打开状态。

这用于将大型(>1 mb)文件从内部 API 流式传输到请求者。

问题是,为什么它保持连接打开?它对上游服务器有什么期望吗?我使用 curl 测试了上游服务器,并且连接确实关闭了 - 它只是在通过此代理时没有关闭。

0 投票
0 回答
203 浏览

scala - 为什么 PushEnumerator 会挂在这里?

在一个 sbt play 项目console-project中,我运行并粘贴以下代码:

但是它会因超时而死。我在这里做错了吗?

0 投票
2 回答
393 浏览

haskell - 简单的生成器

这段代码来自一篇名为“Lazy v. Yield”的论文。它是关于一种将数据流的生产者和消费者解耦的方法。我了解代码的 Haskell 部分,但 O'Caml/F# 让我无法理解。由于以下原因,我不理解此代码:

对于将异常作为参数并返回单位的函数,我可以期待什么样的行为?

消费者如何投射到特定的异常中?(这意味着什么?)

什么是消费者的例子?

0 投票
1 回答
226 浏览

scala - 使用枚举器编写函数

是否可以使用 Enumerator 或 EnumeratorM 组合任意函数,以便首先通过应用该函数对推入迭代器的每个单独的数据项进行预处理?

0 投票
2 回答
978 浏览

scala - Scala 中使用惰性求值或融合的迭代器?

我听说迭代者很懒,但是他们到底有多懒呢?或者,是否可以将迭代器与后处理功能融合,从而不必构建中间数据结构?

例如,我是否可以在我的迭代对象中Stream[Option[String]] 从 ajava.io.BufferedReader构建一个 100 万个项目,然后None以组合方式过滤掉 s,而不需要将整个 Stream 保存在内存中?并且同时保证我不炸堆?或类似的东西 - 它不必使用Stream.

我目前正在使用 Scalaz 6,但如果其他迭代实现能够以更好的方式做到这一点,我很想知道。

请提供完整的解决方案,包括关闭BufferedReader和调用unsafePerformIO(如果适用)。

0 投票
2 回答
759 浏览

scala - 在没有错误状态的情况下处理迭代库中的异常

我正在尝试编写一个枚举器,用于从java.io.BufferedReader使用Scalaz 7 的 iteratee 库中逐行读取文件,该库目前只为java.io.Reader.

我遇到的问题与我使用过的所有其他迭代库(例如Play 2.0John Millikin 的enumeratorStepHaskell)作为其类型的构造函数之一和 Scalaz 7都存在错误状态有关。没有。

我目前的实现

这是我目前拥有的。首先是一些导入和IO包装器:

还有一个类型别名来清理一下:

现在是一个tryIO助手,模仿(松散地,可能是错误地)在enumerator

自身的枚举器BufferedReader

最后是一个负责打开和关闭阅读器的枚举器:

现在假设我想将文件中包含至少 25 个'0'字符的所有行收集到一个列表中。我可以写:

在许多方面,这似乎工作得很好:我可以开始这个动作unsafePerformIO,它会在几分钟内通过数千万行和千兆字节的数据,在恒定的内存中并且不会破坏堆栈,然后关闭阅读器完成后。如果我给它一个不存在的文件的名称,它会尽职尽责地将包含在 a 中的异常返回给我Left,并且enumBuffered如果它在读取时遇到异常,至少似乎表现得适当。

潜在问题

不过,我对我的实现有些担心——尤其是tryIO. 例如,假设我尝试编写一些迭代:

如果我运行它,我会得到以下信息:

如果我在 GHCi 中尝试同样的事情enumerator,结果更像我所期望的:

我只是看不到在 iteratee 库本身没有错误状态的情况下获得这种行为的方法。

我的问题

我并不声称自己是迭代器方面的专家,但我在一些项目中使用了各种 Haskell 实现,感觉我或多或少地理解了基本概念,并且曾经和 Oleg 喝过咖啡。不过,我在这里不知所措。这是在没有错误状态的情况下处理异常的合理方法吗?有没有一种方法可以实现tryIO更像enumerator版本?由于我的实现行为不同,是否有某种定时炸弹在等着我?

0 投票
2 回答
532 浏览

scala - 在 Play 2.0 中无法理解 Iteratee.fold

我正在阅读 Iteratee.scala 的源代码:https://github.com/playframework/Play20/blob/master/framework/src/iteratees/src/main/scala/play/api/libs/iteratee/Iteratee。斯卡拉

特别是构造“折叠”迭代的便捷方法。

在每个 case 语句中,我们都调用了DoneCont构造函数。但是这些构造函数是在哪里定义的呢?我推断这些必须是Iteratee特征的实现者,但我无法通过为“扩展 Iteratee”执行 ctrl+F 来找到它们。