我编写了一个程序,可以递归地读取一个目录中的文件,修改它们并将它们写入另一个目录中。每次我运行该程序时,它都会在几百次迭代后崩溃。我刚刚再次运行它,似乎完成了任务。
无论是nodejs还是Mac OS X,或者最有可能的是nodejs-on-Mac-OS-X,似乎对一次可以打开的文件数量有某种限制。四处搜索,我发现解决方案是使用类似 ulimit -n 10480
的东西,一切都会好起来的。这是正确的方法吗?本能地,我宁愿不修改我的系统设置,而是修改我的程序以使其在限制内工作。
观察:早些时候,我曾经使用 Perl 来完成上面描述的任务,而且从来没有遇到过问题。我假设这是因为我正在打开、转换、然后关闭文件,然后继续前进。在nodejs中,使用async
模式,我无法在继续下一个文件之前关闭文件。如果我在sync
模式下执行任务,它就可以正常工作。
最佳答案
您可以将异步库与限制命令结合使用,将处理的文件数量限制为一定数量。例如:
async.eachLimit(files, 1000, function (file, next) {
processFile(file, next);
}, done);
如果您希望在处理下一个文件之前处理单个文件,只需使用eachSeries。
async.eachSeries(files, function (file, next) {
processFile(file, next);
}, done);
关于node.js - nodejs/Mac 和打开文件限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910711/