nacos-sdk-rust binding for Python

广告时间

nacos-sdk-rust-binding-py : nacos-sdk-rust binding for Python with PyO3.

Tip: nacos-sdk-python 仓库暂未提供 2.x gRPC 交互模式,为了能升级它,故而通过 ffi 方式调用 nacos-sdk-rust

py 包 -> https://pypi.org/project/nacos-sdk-rust-binding-py

客官,走过路过不要错过,买不买瞧一瞧也是好的。行过路过唔好错过啦👆~

缘起?冲突!

啊哈?哪有那么多理由!就是闲来无事,想试试 binding for Python …

的确不像 nacos-sdk-rust-binding-node 有实际的需求,但也偶尔在 Nacos 社区用户群里看到有人问 nacos-sdk-python 是否支持 gRPC ;虽也想提供些帮助,之前也了解有 PyO3 神器,但确实不懂 Python 这门语言。

这不是巧了吗这不是

也是偶然,近来转岗到新部门,恰逢上手新工作有个文档记录了黑屏操作的 py 脚本 😂 ;而我作为负责人刚好又要提供它给内部用户,若我不理解脚本干了啥那说不过去;唯有尝试看了看,emmmm 语法确实不难,简单易理解。

前些天阅览了这篇文章 「为 Databend Rust Driver 实现 Python Binding」,我可记着它,会有一日能实现 nacos-sdk-rust binding for Python

周末~闲来无事!开搞~

How? PyO3 + Maturin

Rust 和 Python 都拥有丰富的包和库。在 Python 中,很多包的底层是使用 C/C++ 编写的,而 Rust 天生与 C 兼容。因此,我们可以使用 Rust 为 Python 编写软件包,实现 Python 调用 Rust 的功能,从而获得更好的性能和速度。

为了实现这一目标,PyO3 应运而生。PyO3 不仅提供了 Rust 与 Python 的绑定功能,还提供了一个名为 maturin 的开箱即用的脚手架工具。通过 maturin,我们可以方便地创建基于 Rust 开发的 Python 扩展模块。这样一来,我们可以重新组织代码,使用 Rust 编写性能更好的部分,而其余部分仍然可以使用原始的 Python 代码。

– 摘自「为 Databend Rust Driver 实现 Python Binding

除了「Databend Rust Driver」还借鉴 PyO3 examples wasmer-python 等些项目,以及「Python3 教程 | 菜鸟教程

由 maturin 初始化项目,仅需十来个提交完成基本可用的功能
nacos-sdk-rust-binding-py-commit

难点

  1. python 默认非 aysnc ?
    a. maturin 构建提示 Rust 的绑定代码不能写 async 方法!
    b. 若 async ,py 应该是要借助 asyncio 库来支持,没深入理解也暂时让使用成本低,故而启用了非 async 的 nacos-sdk-rust 。
  2. python 函数被 Rust 调用
    a. Nacos 配置监听、服务订阅,这些 callback 函数需要由 py 用户实现逻辑作为参数传入。

第二点在 wasmer-python/packages/api/src/externals/function.rs 找到了借鉴,所以 Nacos Config Listener 绑定方法实现如下

#[pyo3(signature = (data_id, group, listener))]
pub fn add_listener(
    &self,
    py: Python,
    data_id: String,
    group: String,
    listener: &PyAny, // PyFunction arg: <NacosConfigResponse>
) -> PyResult<()> {
    if !listener.is_callable() {
        return Err(PyErr::new::<PyValueError, _>(
            "Arg `listener` must be a callable",
        ));
    }
    self.inner
        .add_listener(
            data_id,
            group,
            Arc::new(NacosConfigChangeListener {
                func: Arc::new(listener.to_object(py)),
            }),
        )
        .map_err(|nacos_err| PyRuntimeError::new_err(format!("{:?}", &nacos_err)))?;
    Ok(())
}

pub struct NacosConfigChangeListener {
    func: Arc<PyObject>,
}

impl nacos_sdk::api::config::ConfigChangeListener for NacosConfigChangeListener {
    fn notify(&self, config_resp: nacos_sdk::api::config::ConfigResponse) {
        let ffi_conf_resp = transfer_conf_resp(config_resp);

        // call PyFunction with args
        let _ = Python::with_gil(|py| -> PyResult<()> {
            let _ = self.func.call(py, (ffi_conf_resp,), None);
            Ok(())
        });
    }
}

总结

虽小编不是 python 真实用户,但闲来无事嘛,做点什么小贡献,亲身体验了「Rust could binding for Anythings!!!~」

  • https://github.com/napi-rs/napi-rs binding for NodeJs
  • https://github.com/PyO3/pyo3 binding for Python
  • https://github.com/dtolnay/cxx binding for C++
  • https://github.com/jni-rs/jni-rs binding for Java

附阅:「nacos-sdk-rust binding for NodeJs」、「Rust 从入门到放弃,再入门到贡献 nacos-sdk-rust

### Nacos-SDK-Python V2 版本的相关信息 Nacos 是阿里巴巴开源的一款用于服务发现和服务管理的工具,而 `nacos-sdk-python` 则是其 Python 客户端实现。以下是关于 `nacos-sdk-python` v2 版本的信息及其安装指南。 #### 1. 安装方法 可以通过 PyPI 来安装 `nacos-sdk-python` 的最新版本。如果需要指定 v2.x 版本,则可以使用以下命令: ```bash pip install nacos-sdk-python==2.* ``` 此命令会自动下载并安装最新的 v2.x 系列版本[^3]。 #### 2. 配置依赖环境 为了确保客户端能够正常运行,需确认已安装 Python 3.6 或更高版本。此外,还需要配置好 Nacos Server 地址以及相关认证信息(如适用)。具体初始化代码示例如下所示: ```python from nacos import NacosClient client = NacosClient(server_addresses="http://localhost:8848", namespace="", ak=None, sk=None) data_id = "example" group = "DEFAULT_GROUP" config_content = client.get_config(data_id=data_id, group=group) print(config_content) ``` 上述代码展示了如何通过 `NacosClient` 获取配置项的内容[^4]。 #### 3. 文档与支持资源 官方文档提供了详细的 API 使用说明和最佳实践建议。对于 v2.x 版本的具体功能更新和支持特性,可访问 GitHub 上的项目页面获取更多信息: - **GitHub Repository**: https://github.com/nacos-group/nacos-sdk-python - **Release Notes**: 查看每次发布的变更日志以了解新增特性和修复问题[^5]。 #### 4. 常见问题排查 如果遇到任何兼容性或者连接方面的问题,请先验证网络连通性,并检查是否正确设置了权限参数。另外也可以尝试升级到最新稳定版来解决潜在 bug。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值