6个版本
0.3.0 | 2024年4月20日 |
---|---|
0.2.4 | 2023年10月22日 |
0.2.3 | 2023年3月21日 |
#10 in #slurm
100KB
2K SLoC
slurm-spank-rs
用于编写Slurm SPANK插件的Rust绑定
lib.rs
:
用于编写Slurm SPANK插件的Rust绑定
简介
这个crate允许使用Rust编写Slurm SPANK插件。要了解通过SPANK可用的功能,请参阅官方的SPANK文档
。
要使用此crate创建SPANK插件,您需要定义一个结构体,为其实现Plugin
特质,并使用SPANK_PLUGIN!
宏使其可作为SPANK插件使用。
Plugin特质的方针对应于由SPANK API定义的回调,如init_post_opt
、task_post_fork
等。这些方法具有默认实现,这意味着您只需实现与您的插件相关的回调。
每个回调方法都传递一个SpankHandle
引用,允许通过SPANK API与Slurm交互。
当从回调返回一个[Err
]时,默认情况下将显示错误消息并将其记录,具体取决于上下文。此行为可以通过report_error
方法覆盖。还配置了默认的Subscriber
,以方便在使用SPANK日志功能(如以下示例所示)时使用tracing
crate进行日志记录和错误报告。这可以通过setup
方法覆盖。
示例:hello.so
以下示例实现了一个简单的hello world插件。更完整的示例可在仓库的示例目录中找到,展示了如何实现与Slurm中C SPANK API示例相同的renice插件。
以下Cargo.toml可用于构建此示例插件
[package]
name = "slurm-spank-hello"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
eyre = "0.6.8"
slurm-spank = "0.3"
tracing = "0.1.37"
依赖项
~5.5–8.5MB
~144K SLoC