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

