【问题标题】:Read requests waiting on finished stream读取请求等待完成的流
【发布时间】:2013-09-11 17:51:35
【问题描述】:

我正在使用pngjs 来读写一些PNG。我会定期收到此错误:

Error: There are some read requests waiting on finished stream
    at ChunkStream._end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/chunkstream.js:107:13)
    at ChunkStream.end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/chunkstream.js:94:14)
    at PNG.end (/home/mbayazit/qatools/pdiff/node_modules/pngjs/lib/png.js:105:18)
    at ReadStream.onend (_stream_readable.js:483:10)
    at ReadStream.g (events.js:175:14)
    at ReadStream.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:910:16
    at process._tickCallback (node.js:415:13)

但它没有在我的程序中给我一个行号。

我只在少数地方处理流,它们是:

fs.createReadStream(oldScreen).pipe(new PNG).on('parsed', function() {
    promises[0].resolve(this);
});

fs.createReadStream(newScreen).pipe(new PNG).on('parsed', function() {
    promises[1].resolve(this);
});

result.png.pack().pipe(fs.createWriteStream(diffName));

这三个文件名永远不会相同,所以它们不应该读/写到同一个地方。我想有可能一个流没有从以前的失败运行中正确关闭。有没有办法可以强制所有流很好地关闭?

【问题讨论】:

  • 您可能需要查看PNG 类的文档。我的猜测是其中有一些东西(因为调用堆栈在PNG.end 变得有趣)。具体来说,您的问题可能在您正在创建的PNG 实例的生命周期中(.pipe(new PNG)),也许它需要.close() 或其他东西。
  • 程序的流程是它使用selenium webdriver将我的网页截图保存为PNG,然后我使用PNGJS读取和操作它。我认为问题可能是我使用了fs.writeFile 而不是fs.writeFileSync,所以它试图在完成写入之前读取PNG。写入可能只需要几毫秒,因此只有当阅读器领先于作者时才会发生错误。这个问题突然出现在我身上,因为我之前直接将它通过管道传输到 PNGJS 而没有先保存它做磁盘。

标签: node.js stream


【解决方案1】:

两个建议:

  1. 使用longjohn,它可能能够在您的代码中提供行号。 (异常发生在异步块中,因此您的堆栈跟踪不包含您的程序,它仅与 V8 主循环中的刻度处理程序堆栈)。

  2. 问题似乎是有人试图读取刚刚“结束”的流(已关闭,或已到达其结束并且底层发出“结束”信号) ")。

【讨论】:

  • longjohn 这次抛出了异常,但仍然没有提供更多信息;没有行号。唯一读取文件流的应该是 PNGJS 本身.... 可能是库中的错误,不确定。编辑:我想我可能知道问题出在哪里。
  • @Mark:我收到了同样的错误。每次我运行一个运行良好的脚本时似乎都无法停止接收它,直到我点击 Control C。你有没有解决这个问题?
  • @Mark:这就是正在发生的事情。我的脚本打开一个文件文件夹并将新数据添加到文件中,然后将它们保存回文件夹。当我点击 Control-C 时,一堆文件以某种损坏的方式保存。每当我再次运行脚本时,它都无法从损坏的文件中读取数据并发生错误。因此错误消息“There are some read requests waiting on finished stream”可以理解为“无法读取文件”。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2020-06-08
相关资源
最近更新 更多