Cpython簡(jiǎn)單介紹

前言

上一篇介紹了Java采用Jython調(diào)用python程序的方式,但是問題是目前只支持python2.x,如果需要調(diào)用python3.x目前是無法做到的,所以想到另外一種方式,把python程序編譯成c++的動(dòng)態(tài)庫(so文件),然后Java采用JNI的方式去調(diào)用,這樣不僅能實(shí)現(xiàn)多語言的調(diào)用,而且執(zhí)行效率也會(huì)比較高。

示例

  1. 首先編寫測(cè)試用的python腳本
    test.py
def wdd(a, b):
    return a + b
  1. 采用distutils工具進(jìn)行打包,需要編寫初始配置
from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("test.py")
)
  1. 編譯動(dòng)態(tài)庫(.so)文件

~/anaconda3/bin/python3 setup.py build_ext

  1. 同級(jí)目錄下會(huì)生成build目錄,目錄下面有打包好的執(zhí)行文件

test.cpython-37m-x86_64-linux-gnu.so

注意:C動(dòng)態(tài)庫是分平臺(tái)的,所以代碼運(yùn)行在哪個(gè)平臺(tái),就需要在那個(gè)平臺(tái)打包,我是在linux上打的

  1. 調(diào)用動(dòng)態(tài)庫
from test import wdd

val = wdd(1, 1)
print(val)

輸出結(jié)果為2,符合預(yù)期

結(jié)

目前只是用python調(diào)用了下動(dòng)態(tài)庫,并沒有用Java的JNI去調(diào)用,原因是我需要編譯的項(xiàng)目比較大,文件太多,而且還涉及到一些模型文件,編譯會(huì)遇到很多問題,所以這種方案也pass掉了。最終的方案選用pyflink,本來flink也是支持多語言的,pyflink就是專門用來與python生態(tài)打通,所以目前這種場(chǎng)景pyflink是個(gè)不錯(cuò)的選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容