主要观点:
- 有 R2 上 Parquet 文件路径列表,需获取每个文件的 Parquet 页脚,避免获取多余内容。
- Rust 的流抽象类似迭代器且可进行异步操作,代码示例展示如何实现获取所需页脚且代码较清晰。
- 工作中部署后在日志中出现 R2 随机超时,同事发现微妙错误,因多个异步任务运行及执行顺序问题导致。
- 有两种解决办法,一是在映射函数中使用
tokio::spawn
,二是在tokio::select!
中单独 spawn 任务获取页脚。 - 即使有上述两种解决方案,仍存在原始阻塞任务的问题,更好的办法是使用
spawn_blocking()
将阻塞工作转移。
关键信息:
- 使用
futures::stream::StreamExt
实现获取 Parquet 页脚。 - 异步任务运行顺序可能导致 R2 超时。
- 两种解决超时问题的方法及更好的用
spawn_blocking()
的建议。
重要细节:
- 在获取页脚的代码中通过
stream::iter
和map
进行异步操作。 - 异步任务
tokio::select!
中任务执行时间差异可能引发超时。 - 提到 Tokio 使用工作窃取执行器但不一定能转移阻塞任务。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。