如何使用python?wasmtime調(diào)用rust生成的wasm庫
本文介紹了使用python wasmtime來訪問rust庫的便捷方法,步驟極其簡練,可以在生產(chǎn)環(huán)境中使用。
安裝rust target wasm32-wasi
使用如下命令安裝wasm32-wasi,用于便捷地將rust編譯為wasm字節(jié)碼。
rustup target add wasm32-wasi
編寫rust庫
使用cargo創(chuàng)建rust庫
cd /mnt/d/workspace/rust cargo new --lib wasmlib
編輯Cargo.toml文件
cd wasmlib echo "[lib]" >> Cargo.toml echo "crate-type = ['cdylib']" >> Cargo.toml
編輯rust源文件
編輯src/lib.rs, 修改文件內(nèi)容如下
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}將rust庫編譯為wasm字節(jié)碼
將rust庫編譯為wasm字節(jié)碼
cargo build --release --target wasm32-wasi
查看生成的wasm文件
cd target/wasm32-wasi/release ls
結(jié)果如下,其中wasmlib.wasm就是wasm字節(jié)碼文件:
build deps examples incremental wasmlib.d wasmlib.wasm
安裝python wasmtime庫
pip3 install wasmtime
測試使用python wasmtime調(diào)用rust庫(wasm字節(jié)碼)
hzw@hzwwin:/mnt/d/workspace/rust/wasmlib/target/wasm32-wasi/release$ python3
Python 3.10.4 (main, Apr 2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wasmtime.loader
>>> import wasmlib # 不需要加.wasm擴(kuò)展名
>>> dir(wasmlib)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'memory']
>>> wasmlib.add(2, 2)
4
>>> wasmlib.add(2, 4)
6
>>> wasmlib.add("a", "b")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/hzw/.local/lib/python3.10/site-packages/wasmtime/loader.py", line 89, in <lambda>
item = lambda *args,func=func: func(store, *args) # noqa
File "/home/hzw/.local/lib/python3.10/site-packages/wasmtime/_func.py", line 83, in __call__
param_vals = [Val._convert(ty, params[i]) for i, ty in enumerate(param_tys)]
File "/home/hzw/.local/lib/python3.10/site-packages/wasmtime/_func.py", line 83, in <listcomp>
param_vals = [Val._convert(ty, params[i]) for i, ty in enumerate(param_tys)]
File "/home/hzw/.local/lib/python3.10/site-packages/wasmtime/_value.py", line 154, in _convert
raise TypeError("don't know how to convert %r to %s" % (val, ty))
TypeError: don't know how to convert 'a' to i32參考鏈接
https://pypi.org/project/wasmtime/
到此這篇關(guān)于如何使用python wasmtime調(diào)用rust生成的wasm庫的文章就介紹到這了,更多相關(guān)python wasmtime調(diào)用rust生成的wasm庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)簡單的Rust風(fēng)格類型檢查
- Python調(diào)用Rust的5種方法的實(shí)現(xiàn)小結(jié)
- 詳解Python和Rust中內(nèi)存管理機(jī)制的實(shí)現(xiàn)與對比
- 利用Rust實(shí)現(xiàn)Python加速的技巧分享
- rust、go、java、python、nodejs各語言內(nèi)存對比詳解
- C++,C#,Rust,Go,Java,Python,JavaScript的性能對比全面講解
- Python與Rust混合編程實(shí)戰(zhàn):高性能數(shù)據(jù)處理和Web應(yīng)用后端構(gòu)建等案例
相關(guān)文章
Python中搜索和替換文件中的文本的實(shí)現(xiàn)(四種)
本文主要介紹了Python中搜索和替換文件中的文本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
Python實(shí)現(xiàn)為Excel中每個單元格計(jì)算其在文件中的平均值
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實(shí)現(xiàn)對大量不同的Excel文件加以跨文件、逐單元格平均值計(jì)算,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10
Python實(shí)現(xiàn)獲取網(wǎng)站PR及百度權(quán)重
這篇文章主要介紹了Python實(shí)現(xiàn)獲取網(wǎng)站PR及百度權(quán)重,本文使用傳參的方式請求站長工具和谷歌工具獲取PR值和百度權(quán)重,需要的朋友可以參考下2015-01-01
Python實(shí)現(xiàn)的計(jì)算器功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的計(jì)算器功能,涉及Python四則運(yùn)算、取反、百分比等相關(guān)數(shù)學(xué)運(yùn)算操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04

