Clojure写文件很慢

3
我们有一个Clojure应用程序,它使用spit将数据集(~3000行)写入本地文件。它在编写代码的机器上运行得很好,但是在每台拉取git代码的其他机器上,写入步骤非常缓慢。该进程在原始机器上只需要几秒钟,但在其他机器上需要十多分钟。
问题主要出现在两台主要的机器上(开发者的机器和我的机器),它们都是Manjaro Arch Linux系统,具有相似的规格和配置。我们都从相同的Git源中拉取并且使用相同的数据。
如果我尝试仅写入数据集的前10行,代码仍在我的机器上运行完毕(即使这也需要近一分钟的时间),我们已确认代码在我的机器上仍然可用。
在这个过程中,两台机器的CPU和RAM几乎没有受到影响,并且输出文件大小不到1 MB。
如果我们使用Java.io库与clojure.data.csv或dk.ative.docjure.spreadsheet而不是spit,我们会遇到同样的问题。
数据的抽象形状为:
[["Name" "Price"]
 ["Foo Widget" 100]
 ["Bar Widget" 200]]

(但是当然大于3000行)

非常感谢您的帮助!


1
你有可以提供一个最小化可重现问题的代码示例吗? - mvarela
3
这可能是一个非常明显的问题,你可能已经想到了,而且也不适用于你,但是快速机器是否正在写入真正的本地文件系统,而其他机器则在写入通过网络挂载的文件系统? - andy_fingerhut
2
你提到了行数,但是你知道原始机器上在几秒钟内写入的文件大小吗?在其他机器上写入的文件大小是否与在那里运行时非常缓慢的相同? - andy_fingerhut
1
在我上面的两个评论之后补充一点:在验证文件大小相同之后,您可以使用另一个实用程序(如cp)来复制数据并查看是否仍然存在显着差异?这可以帮助验证它是否与Clojure相关还是更低级别的问题。 - Reut Sharabani
1
@Reut Sharabani - 是的,我已经复制了一份在工作机器上编写的文件,并将其复制到有问题的机器上,没有出现任何减速;它在不到一秒钟的时间内完成了复制。 - amberk12
显示剩余4条评论
1个回答

0

好的,当我们在编写代码示例时,我们收到了来自另一个来源的建议,这些建议解决了问题。

  1. 我们将读取器更改为使用输入流而不是读取整个文件
  2. 我们像@Reut Sharabani建议的那样将写入器包装在doall

潜在的问题似乎是每台机器如何处理惰性

感谢所有回复的人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接