我的旧代码版本0.12.7工作得很好.
然而,它给EMFILE打开的文件太多了错误频繁。
如何释放使用
打开的文件描述符require("fs").readFile(resobj.name, 'utf8', function (err, data)
{
});
您很可能需要批量读取这些文件,像这样:
const fs = require('fs/promises');
const files = [...<array of millions of file paths>];
const MAX_FILES_TO_PROCESS = 1000;
let promises;
let contents;
// Process 1000 files at a time
(async () => {
for (let a = 0; a < files.length; a += MAX_FILES_TO_PROCESS) {
promises = (files.slice(a, MAX_FILES_TO_PROCESS)).map(path => fs.readFile(path));
contents = await Promise.all(promises);
//Process the contents, then continue on the next loop
}
})();
两个可能对你有帮助的观察:
使用
createReadStream
而不是readFile
,因为后者将整个文件读取到内存中。如果你要处理成千上万的对象,这是不可伸缩的。readFile
不返回描述符,因为它会自动关闭文件。