如何使用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
結果如下,其中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擴展名 >>> 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/
到此這篇關于如何使用python wasmtime調(diào)用rust生成的wasm庫的文章就介紹到這了,更多相關python wasmtime調(diào)用rust生成的wasm庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python如何實現(xiàn)不可變字典inmutabledict
這篇文章主要介紹了python如何實現(xiàn)不可變字典inmutabledict,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-01-01python Pygal庫生成SVG(可縮放矢量圖形)圖表示例
這篇文章主要為大家介紹了python Pygal庫生成SVG(可縮放矢量圖形)圖表示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01