【问题标题】:Deleting Files in tmp folder of Google Cloud Functions删除 Google Cloud Functions 的 tmp 文件夹中的文件
【发布时间】:2018-07-23 13:33:52
【问题描述】:

我目前正在我的 os.tmpdir 文件夹中的谷歌云函数中写入文件。现在我知道每次函数触发都会略有不同,并且函数调用之间的 tmp 文件夹永远不会相同(不能两次引用同一个 tmp 文件夹)。我的问题是我是否需要在函数完成执行之前删除文件,或者是否自动取消引用所有 tmp 内存。

编辑: 当我写入 os.tmpdir 时,我可以在查看目录时看到该文件,但在随后的调用中我什么也看不到。我认为这意味着该文件不知何故不再存在(不太可能),或者我正在寻找不同的地方。

下面是我编写文件的代码。

var wstream = fs.createWriteStream(os.tmpdir() + '/myOutput.txt');


wstream.write('Hello world!\n');
wstream.write('Another line\n');

wstream.end();      

wstream.on('finish', function () {
        console.log('file has been written');
        fs.readdir(os.tmpdir(), (err, files) => {
            console.log(files.length);
            files.forEach(file => {
                        console.log("Hey Again3", file);
                });
            })

编辑 2:我一直在运行一些测试,并且新系统的出现比这个问题中指出的要频繁得多(我每次都观察到与我在这里被告知的情况几乎永远不会发生)。我还问了另一个问题,并从另一位更符合个人测试的 firebase 员工那里收到了稍微矛盾的建议:Can't Find file after having written to it in Google Cloud Functions

建议保持一致,但我从未观察到在单个函数的多次调用之间具有完全相同的文件系统,如下所示。

【问题讨论】:

  • 我的团队也有同样的问题。你解决了吗?

标签: node.js google-cloud-functions


【解决方案1】:

首先,os.tmpdir() 标识的 tmp 文件夹始终相同。如果您观察到不同的东西,请准确说明您所看到的。

其次,您没有义务从 tmpdir 中删除文件,但它们会占用内存(它是基于内存的文件系统)。留下这些文件会使您未来的函数调用更加昂贵,因为您会随着时间的推移为内存付费。此外,当您累积临时文件时,您可能会面临内存不足的风险。为了提高效率,您应该始终在函数完成之前删除您创建的所有文件。

【讨论】:

  • 根据 Trevor Martin 的这个回答,随后对相同功能的调用可能发生在不同的容器上,不能保证相同的 /tmp 文件夹,还是我误解了他的回答? stackoverflow.com/questions/42719793/…
  • 没有任何保证,但实例肯定会在可能的情况下被重用,并且新实例仅在负载指示时添加。否则系统无法很好地扩展。
  • 对不起,有什么困惑?我说“由 os.tmpdir() 标识的 tmp 文件夹总是相同的”。每个实例都是完全相同的文件夹,并且可能总是“/tmp”。两个实例不可能共享同一个内存文件系统!
  • 嗯,这暗示着两个实例不可能共享同一个内存文件系统。但在同一个例子中,总是意味着总是。你需要考虑到这一点。
  • 您现在似乎有两个问题。我回答了第一个。你能把第二个分成自己的问题吗? (Stack Overflow 并不是真正适合在改变问题的同时进行大量来回。)
猜你喜欢
  • 2018-12-31
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 2019-12-31
  • 2018-08-02
  • 1970-01-01
相关资源
最近更新 更多