rust - par_bridge().map() 停止并消耗内存而不是迭代?
问题描述
我正在尝试从标准输入中逐行读取 JSON 对象流,并从它们中提取“值”键作为字符串:
use rayon::prelude::*; // 1.0.3
use serde_json::Value; // 1.0.37
use std::io::{self, BufRead};
use std::sync::mpsc::channel;
fn main() {
let stdin = io::stdin();
let rx = {
let (tx, rx) = channel();
for line in stdin.lock().lines() {
tx.send(line.unwrap()).unwrap();
}
rx
};
let it = rx.into_iter().par_bridge().map(|line| -> String {
let v: Value = serde_json::from_str(&line.clone()).unwrap();
let ret = v["value"].as_str().unwrap().into();
println!("{}", ret);
ret
});
eprintln!("Starting actual work.");
it.for_each(|x| {
println!("{}", x);
});
}
eprintln!()
永远不会被调用并且我的内存不足,因为我使用一个巨大的文件作为输入。为什么map()
不只返回一个我可以使用的迭代器,而是等待它的输入结束?
解决方案
推荐阅读
- java - 每次实例化类时如何实例化单独的bean成员
- unit-testing - 如何对文档具有给定权限进行单元测试?
- c++ - “void *”类型的值不能分配给“double *”类型的实体
- laravel - 以雄辩的方式附加到数组的字段
- amazon-web-services - Terraform:将预先存在的 aws 策略附加到预先存在的 aws 角色
- python - 是否可以让 numpy 从不同调用的分布中生成相同的随机数?
- bitmap - 如何平滑宽阶梯位图?
- azure - 适用于 Linux 容器的 Azure Web 应用服务未从 docker-compose 文件中获取环境变量
- ruby-on-rails - 如何在 ActiveRecord 中处理 Rails N:M/HABTM 关系?
- spring-batch - Spring Batch 团队是否提供读取 Excel 文件的内置方式?