【问题标题】:Clojure writing files slowlyClojure 写入文件慢
【发布时间】:2020-05-15 08:39:11
【问题描述】:

我们有一个 Clojure 应用程序,它获取数据集(约 3000 行)并使用 spit 将其写入本地文件。它在编写它的机器上运行良好,但在所有其他拉下 git 代码的机器上,写入步骤非常缓慢。该过程在原始机器上需要几秒钟,但在其他机器上需要十分钟以上。

有问题的两台主要机器(开发者的机器和我的机器)都是 Manjaro Arch Linux 系统,具有可比的规格和配置。我们都从同一个 Git 源中提取,并且都提取相同的数据。

我们已经确认代码仍然在我的机器上运行,因为如果我尝试只编写数据集的前十行,它就会完成(即使这仍然需要将近一分钟)。

在两台机器上的处理过程中几乎没有触及 CPU 和 RAM,并且输出文件大小小于 1 MB。

如果我们将 Java.io 库与 clojure.data.csv 或 dk.ative.docjure.spreadsheet 一起使用而不是 spit,我们会遇到同样的问题。

抽象的数据形状是:

[["Name" "Price"]
 ["Foo Widget" 100]
 ["Bar Widget" 200]]

(但当然是大于 3000 行)

感谢任何帮助!

【问题讨论】:

  • 您是否拥有或能否提供重现该问题的 MWE?
  • 这可能是一个很明显的问题,你已经想到了,它并不适用于你,而是快速机器写入真正的本地文件系统,但其他人正在写入通过网络安装的文件系统?
  • 您提到了行数,但是您知道在原始机器上以秒为单位写入的文件的大小(以字节为单位)吗?写入速度非常慢的其他机器上的文件大小是否相同?
  • 添加到我上面的两个 cmets:你已经验证文件大小是一样的你可以使用另一个实用程序来复制数据(如cp)和看看是否还有显着差异?这可以帮助验证它是否与 clojure 相关或更底层的东西。
  • @Reut Sharabani - 是的,我已经将写在工作机器上的文件副本复制到有问题的机器上,并且没有减速;它在不到一秒的时间内复制

标签: java clojure io leiningen arch


【解决方案1】:

好的,所以在我们编写要分享的代码示例时,我们收到了来自其他来源的一些建议,这些建议已经解决了这个问题。

  1. 我们将阅读器更改为使用输入流而不是读取整个文件
  2. 我们将作者包裹在 doall 中,正如 @Reut Sharabani 所建议的那样

根本问题似乎是每台机器如何处理惰性

感谢所有回复的人!

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2021-05-09
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多