2个版本
0.2.1 | 2024年7月28日 |
---|---|
0.2.0 | 2024年7月28日 |
#297 在 算法
262 每月下载量
25KB
247 行
RSBatch Maestro
一个用于灵活的批量拆分和管理的Rust库,具有各种策略。
特性
- 总量的批量平均和不等分
- 按计数、余数或基于权重进行拆分
- 基于范围的拆分和优化
- 强制最小批量大小
- 批量合并和重新平衡
- 处理边缘情况并提供有意义的错误
安装
将其添加到您的 Cargo.toml
[dependencies]
rsbatch-maestro = "0.2.0"
用法
use rsbatch_maestro::even_split;
fn main() {
match even_split(128, 8) {
Ok((num_batches, batch_sizes)) => {
println!("Number of batches: {}", num_batches);
println!("Batch sizes: {:?}", batch_sizes);
},
Err(e) => println!("Error: {}", e),
}
}
API
该库提供了以下功能
pub fn even_split(total: usize, max_batch_size: usize) -> Result<(usize, Vec<NonZeroUsize>), String>
pub fn uneven_split(total: usize, max_batch_size: usize) -> Result<(usize, Vec<NonZeroUsize>), String>
pub fn split_by_count(total: usize, num_batches: usize) -> Result<Vec<NonZeroUsize>, String>
pub fn split_with_remainder(total: usize, batch_size: usize) -> Result<(Vec<NonZeroUsize>, usize), String>
pub fn split_weighted(total: usize, weights: Vec<usize>) -> Result<Vec<NonZeroUsize>, String>
pub fn split_range(total: usize, min_batch_size: usize, max_batch_size: usize) -> Result<Vec<(usize, usize)>, String>
pub fn optimize_split(total: usize, min_batches: usize, max_batches: usize) -> Result<(usize, Vec<NonZeroUsize>), String>
pub fn split_with_min_batch(total: usize, max_batch_size: usize, min_batch_size: usize) -> Result<(usize, Vec<NonZeroUsize>), String>
pub fn split_to_nearest(total: usize, target_batch_size: usize) -> Result<(usize, Vec<NonZeroUsize>), String>
pub fn merge_batches(batches: Vec<NonZeroUsize>, merge_count: usize) -> Result<Vec<NonZeroUsize>, String>
pub fn rebalance_batches(batches: Vec<NonZeroUsize>) -> Vec<NonZeroUsize>
有关每个函数的详细文档,请参阅API文档。
示例
use rsbatch_maestro::*;
use std::num::NonZeroUsize;
// Even split
assert_eq!(even_split(50, 8), Ok((10, vec![NonZeroUsize::new(5).unwrap(); 10])));
// Uneven split
assert_eq!(uneven_split(50, 8), Ok((7, vec![NonZeroUsize::new(8).unwrap(); 6].into_iter().chain(vec![NonZeroUsize::new(2).unwrap()]).collect())));
// Split by count
assert_eq!(split_by_count(50, 8), Ok(vec![NonZeroUsize::new(7).unwrap(); 2].into_iter().chain(vec![NonZeroUsize::new(6).unwrap(); 6]).collect()));
// Split with remainder
assert_eq!(split_with_remainder(50, 8), Ok((vec![NonZeroUsize::new(8).unwrap(); 6], 2)));
// Split weighted
assert_eq!(split_weighted(100, vec![1, 2, 3, 4]), Ok(vec![NonZeroUsize::new(10).unwrap(), NonZeroUsize::new(20).unwrap(), NonZeroUsize::new(30).unwrap(), NonZeroUsize::new(40).unwrap()]));
// More examples for other functions can be found in the API documentation
用例
Batch Maestro功能丰富,可用于各种场景
- 任务分配:在并行处理系统中将任务分配给工作线程。
- 负载均衡:将网络流量或数据库查询分配到多个服务器。
- 资源分配:在不同进程或用户之间分配资源(例如,内存、磁盘空间)。
- 库存管理:将库存项目分配到不同的存储位置或运输中。
- 时间管理:将总时间持续时间分割成段,用于日程安排或时间表。
- 金融应用:将金额分割用于预算或投资目的。
- 数据分区:将大型数据集分割用于分布式处理或存储。
- 批量处理:为任何类型的批量处理操作创建批量。
- UI/UX设计:在用户界面中分配元素,如网格布局或菜单项。
- 教育应用:为小组项目或活动创建学生组。
许可证
该项目受MIT许可证许可 - 请参阅LICENSE文件以获取详细信息。
贡献
欢迎贡献!请随时提交拉取请求。
- 分支项目
- 创建您的功能分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m '添加一些惊人的功能'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开一个拉取请求
请确保根据需要更新测试。
版本控制
我们使用SemVer进行版本控制。有关可用版本,请参阅此存储库的标签。
作者
- aeromilai - 初始工作 - aeromilai
有关参与此项目的贡献者列表,请参阅。
致谢
- 受在各个领域对高效和灵活的资源分配需求的启发。
- 感谢Rust社区提供的优秀工具和库。
变更日志
有关我们的发布详情,请参阅变更日志。