真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)-創(chuàng)新互聯(lián)

需求背景

進(jìn)擊的Python

隨著人工智能的興起,Python這門(mén)曾經(jīng)小眾的編程語(yǔ)言可謂是煥發(fā)了第二春。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比興安盟網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式興安盟網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋興安盟地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴(lài)。

Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)

以tensorflow、pytorch等為主的機(jī)器學(xué)習(xí)/深度學(xué)習(xí)的開(kāi)發(fā)框架大行其道,助推了python這門(mén)曾經(jīng)以爬蟲(chóng)見(jiàn)長(zhǎng)(python粉別生氣)的編程語(yǔ)言在TIOBE編程語(yǔ)言排行榜上一路披荊斬棘,坐上前三甲的寶座,僅次于Java和C,將C++、JavaScript、PHP、C#等一眾勁敵斬落馬下。

Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)
Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)

當(dāng)然,軒轅君向來(lái)是不提倡編程語(yǔ)言之間的競(jìng)爭(zhēng)對(duì)比,每一門(mén)語(yǔ)言都有自己的優(yōu)勢(shì)和劣勢(shì),有自己應(yīng)用的領(lǐng)域。
另一方面,TIOBE統(tǒng)計(jì)的數(shù)據(jù)也不能代表國(guó)內(nèi)的實(shí)際情況,上面的例子只是側(cè)面反映了Python這門(mén)語(yǔ)言如今的流行程度。

Java 還是 Python

說(shuō)回咱們的需求上來(lái),如今在不少的企業(yè)中,同時(shí)存在Python研發(fā)團(tuán)隊(duì)和Java研發(fā)團(tuán)隊(duì),Python團(tuán)隊(duì)負(fù)責(zé)人工智能算法開(kāi)發(fā),而Java團(tuán)隊(duì)負(fù)責(zé)算法工程化,將算法能力通過(guò)工程化包裝提供接口給更上層的應(yīng)用使用。

可能大家要問(wèn)了,為什么不直接用Java做AI開(kāi)發(fā)呢?要弄兩個(gè)團(tuán)隊(duì)。其實(shí),現(xiàn)在包括TensorFlow在內(nèi)的框架都逐漸開(kāi)始支持Java平臺(tái),用Java做AI開(kāi)發(fā)也不是不行(軒轅君的前同事就已經(jīng)在這樣做了),但限于歷史原因,做AI開(kāi)發(fā)的人本就不多,而這一些人絕大部分都是Python技術(shù)棧入坑,Python的AI開(kāi)發(fā)生態(tài)已經(jīng)建設(shè)的相對(duì)完善,所以造成了在很多公司中算法團(tuán)隊(duì)和工程化團(tuán)隊(duì)使用不同的語(yǔ)言。

現(xiàn)在該拋出本文的重要問(wèn)題:Java工程化團(tuán)隊(duì)如何調(diào)用Python的算法能力?

答案基本上只有一個(gè):Python通過(guò)Django/Flask等框架啟動(dòng)一個(gè)Web服務(wù),Java中通過(guò)Restful API與之進(jìn)行交互

上面的方式的確可以解決問(wèn)題,但隨之而來(lái)的就是性能問(wèn)題。尤其是在用戶(hù)量上升后,大量并發(fā)接口訪問(wèn)下,通過(guò)網(wǎng)絡(luò)訪問(wèn)和Python的代碼執(zhí)行速度將成為拖累整個(gè)項(xiàng)目的瓶頸。

當(dāng)然,不差錢(qián)的公司可以用硬件堆出性能,一個(gè)不行,那就多部署幾個(gè)Python Web服務(wù)。

那除此之外,有沒(méi)有更實(shí)惠的解決方案呢?這就是這篇文章要討論的問(wèn)題。

給Python加速

尋找方向

上面的性能瓶頸中,拖累執(zhí)行速度的原因主要有兩個(gè):

  • 通過(guò)網(wǎng)絡(luò)訪問(wèn),不如直接調(diào)用內(nèi)部模塊快
  • Python是解釋執(zhí)行,快不起來(lái)

眾所周知,Python是一門(mén)解釋型腳本語(yǔ)言,一般來(lái)說(shuō),在執(zhí)行速度上:

解釋型語(yǔ)言 < 中間字節(jié)碼語(yǔ)言 < 本地編譯型語(yǔ)言

自然而然,我們要努力的方向也就有兩個(gè):

  • 能否不通過(guò)網(wǎng)絡(luò)訪問(wèn),直接本地調(diào)用
  • Python不要解釋執(zhí)行

結(jié)合上面的兩個(gè)點(diǎn),我們的目標(biāo)也清晰起來(lái):

將Python代碼轉(zhuǎn)換成Java可以直接本地調(diào)用的模塊

對(duì)于Java來(lái)說(shuō),能夠本地調(diào)用的有兩種:

  • Java代碼包
  • Native代碼模塊

其實(shí)我們通常所說(shuō)的Python指的是CPython,也就是由C語(yǔ)言開(kāi)發(fā)的解釋器來(lái)解釋執(zhí)行。而除此之外,除了C語(yǔ)言,不少其他編程語(yǔ)言也能夠按照Python的語(yǔ)言規(guī)范開(kāi)發(fā)出虛擬機(jī)來(lái)解釋執(zhí)行Python腳本:

  • CPython: C語(yǔ)言編寫(xiě)的解釋器
  • Jython: Java編寫(xiě)的解釋器
  • IronPython: .NET平臺(tái)的解釋器
  • PyPy: Python自己編寫(xiě)的解釋器(雞生蛋,蛋生雞)

Jython?

如果能夠在JVM中直接執(zhí)行Python腳本,與Java業(yè)務(wù)代碼的交互自然是最簡(jiǎn)單不過(guò)。但隨后的調(diào)研發(fā)現(xiàn),這條路很快就被堵死了:

  • 不支持Python3.0以上的語(yǔ)法
  • python源碼中若引用的第三方庫(kù)包含C語(yǔ)言擴(kuò)展,將無(wú)法提供支持,如numpy等

這條路行不通,那還有一條:把Python代碼轉(zhuǎn)換成Native代碼塊,Java通過(guò)JNI的接口形式調(diào)用。

Python -> Native代碼

整體思路

先將Python源代碼轉(zhuǎn)換成C代碼,之后用GCC編譯C代碼為二進(jìn)制模塊so/dll,接著進(jìn)行一次Java Native接口封裝,使用Jar打包命令轉(zhuǎn)換成Jar包,然后Java便可以直接調(diào)用。

Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)

流程并不復(fù)雜,但要完整實(shí)現(xiàn)這個(gè)目標(biāo),有兩個(gè)關(guān)鍵問(wèn)題需要解決:

1.Python代碼如何轉(zhuǎn)換成C代碼?

終于要輪到本文的主角登場(chǎng)了,將要用到的一個(gè)核心工具叫:Cython

請(qǐng)注意,這里的Cython和前面提到的CPython不是一回事。CPython狹義上是指C語(yǔ)言編寫(xiě)的Python解釋器,是Windows、Linux下我們默認(rèn)的Python腳本解釋器。

而Cython是Python的一個(gè)第三方庫(kù),你可以通過(guò)pip install Cython進(jìn)行安裝。

官方介紹Cython是一個(gè)Python語(yǔ)言規(guī)范的超集,它可以將Python+C混合編碼的.pyx腳本轉(zhuǎn)換為C代碼,主要用于優(yōu)化Python腳本性能或Python調(diào)用C函數(shù)庫(kù)。

聽(tīng)上去有點(diǎn)復(fù)雜,也有點(diǎn)繞,不過(guò)沒(méi)關(guān)系,get一個(gè)核心點(diǎn)即可:Cython能夠把Python腳本轉(zhuǎn)換成C代碼

來(lái)看一個(gè)實(shí)驗(yàn):

# FileName: test.py
def test_function():
 print("this is print from python script")

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


本文標(biāo)題:Python代碼一鍵轉(zhuǎn)Jar包及Java調(diào)用Python新姿勢(shì)-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/pisie.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部