nacos-sdk-rust binding for Python

这篇具有很好参考价值的文章主要介绍了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 for Python

难点

  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」文章来源地址https://www.toymoban.com/news/detail-488329.html

到了这里,关于nacos-sdk-rust binding for Python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Neovim for Rust

    Neovim for Rust

    之前学习 Rust 一直使用的都是 VScode + rust-analyzer ,最近看到有网友安利 Neovim 于是就试了试,发现确实美观,好用,而且内存占用比较小。我个人很喜欢,也推荐给给大家。 前提:得有个代理,不然大概率会失败,因为需要从 github 上下载插件。 1. 首先配置好终端代理 接下来

    2024年02月08日
    浏览(12)
  • ComPDFKit PDF SDK for Windows Crack

    ComPDFKit PDF SDK for Windows Crack

    添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 ComPDFKit PDF SDK允许开发人员在Windows(iOS和

    2024年02月12日
    浏览(9)
  • ComPDFKit Conversion SDK for Windows Crack

    ComPDFKit Conversion SDK for Windows Crack

    High-fidelity PDF conversion to MS Office, HTML, Text, CSV, RTF, Images, and more. ComPDFKit Conversion SDK can be used to convert PDF to Word, PDF to Excel and PDF to PPT. It uses native conversion without any server-side dependencies such as Microsoft Office or LibreOffice, which ensures the security of private information. ComPDFKit Conversion SDK provide

    2024年02月09日
    浏览(10)
  • 7、AWS SDK for Go-文件分片上传

    分段即分片。 文档地址:传送门 使用分段上传可提供以下优势: 提高吞吐量 – 您可以并行上传分段以提高吞吐量。 从任何网络问题中快速恢复 – 较小的分段大小可以将由于网络错误而需重启失败的上传所产生的影响降至最低。 暂停和恢复对象上传 – 您可以在一段时间

    2024年02月01日
    浏览(8)
  • Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js

    Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js

    Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js  出现这个原因是因为 Node 版本与node-sass版本不匹配导致,由于node版本的升级,原来项目中的node-sass版本过低。 可以 win + R  输入cmd 回车  查看当前node版本 查看项目中Node-sass的版本 查看node与node-sass版本

    2024年02月15日
    浏览(7)
  • ArcGIS Maps SDK for JS:隐藏地图边框

    ArcGIS Maps SDK for JS:隐藏地图边框

    近期,将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27,原本去除地图的css代码失效了。 v4.26及以前版本 ,需要用 .esri-view-surface--inset-outline:focus::after 控制边框属性。 从 v4.27版本开始 ,改用 .esri-view-surface--touch-none::after 控制边框属性。 下面为没有关闭地图边框的效果图。

    2024年02月08日
    浏览(11)
  • 爬虫SDK:IronWebScraper 2023.8.1 for .NET Crack

    爬虫SDK:IronWebScraper 2023.8.1 for .NET Crack

    C# framework for extracting clean, structured data from HTML Web applications. IronWebScraper for .NET is a C# web scraping library, that allows developers to simulate and automate human browsing behavior to extract content, files and images from Web applications as native .NET objects. IronWebScraper manages politeness and multithreading in the background,

    2024年02月13日
    浏览(29)
  • ArcGIS Maps SDK for JS(一):概述与使用

    ArcGIS Maps SDK for JS(一):概述与使用

    ArcGIS Maps SDK for JavaScript(以前称为 ArcGIS API for JavaScript),是Esri(环球信息科技公司)开发的一款开发的一款基于JavaScript的webGIS开发工具,用于构建网络制图和空间分析应用程序。SDK 包含 JavaScript API、API 参考、文档、示例和其他资源,可帮助构建网络制图应用程序。截止到

    2024年02月09日
    浏览(12)
  • Vue运行报错:Custom elements in iteration require ‘v-bind:key‘ directives.eslintvue/valid-v-for

    Vue运行报错:Custom elements in iteration require ‘v-bind:key‘ directives.eslintvue/valid-v-for

    在使用vue-cli工具进行开发时,使用v-for出现如下报错: vue规定使用v-for条件渲染时,必须设置一个key,修改如下图(添加 :key=\\\"key\\\" ):

    2024年02月12日
    浏览(11)
  • 【Rust笔记】意译解构 Object Safety for trait

    【Rust笔记】意译解构 Object Safety for trait

    借助【虚表 vtable 】对被调用成员函数【运行时·内存寻址】的作法允许系统编程语言 Rust 模仿出 OOP 高级计算机语言才具备的【专用·多态 Ad-hoc Polymorphism 】特性。 计算机高级语言中的“多态”术语是一个泛指。它通常可被细化为 基于继承关系的“ 子类 ·多态”  Subtype Po

    2024年02月15日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包