我正在通过遍历约有150000张带有元数据的图像的预编译本地数据库来将数据上传到Web服务。为了防止节点抛出Error: EMFILE, too many open files
,我将上传文件批量处理为一次约5000张图像的小任务。
为此,我编写了一个接受上限和下限的脚本:
node upload.js bot_bound top_bound;
代码中有一个比较器,如下所示:
for(i in parsed_data){
if(i >= bot_bound && i < top_bound){
//...process the data
}
}
真正给我带来麻烦的是(i >= bot_bound && i < top_bound)
。表现...很奇怪。对于前几批,其边界低于40000,它跳过了某些值。当我尝试越来越多的批次时,它会跳过更多的值,直到跳过所有的值。到我的边界范围为[95000, 100000)
时,所有值都返回false。
因此,要进行故障排除,我一直在其中抛出以下日志行:
(${i} > ${bot_range}) && (${i} < ${top_range}) :: ${(i >= bot_range && i< top_range)}
它在运行时输出:
...
(94999 >= 95000) && (94999 < 100000) :: false
(95000 >= 95000) && (95000 < 100000) :: false
(95001 >= 95000) && (95001 < 100000) :: false
(95002 >= 95000) && (95002 < 100000) :: false
(95003 >= 95000) && (95003 < 100000) :: false
...
但是,当我输入一个副本时,它会按预期运行:
> var bot_range = 95000
undefined
> var top_range = 100000
undefined
> var i = 95001
undefined
> `(${i} > ${bot_range}) && (${i} < ${top_range}) :: ${(i >= bot_range && i< top_range)}`
'(95001 > 95000) && (95001 < 100000) :: true'
那么,这是怎么回事?我很困惑。