日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Py4j-RPC

發布時間:2024/8/26 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Py4j-RPC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 使用靈活、方便在科研中被廣泛的使用,Numpy和SciPy等科學計算庫使其擁有強大的計算方式。很多機器學習和深度學習的庫也都采用了python,然而在大數據、后臺開發中仍然較多的使用Java來開發健壯的服務。如果你想要在Java中來調用Python代碼的話,本文提供了一種思路,雖然不夠健壯。

本文的初衷是在Java中調用Keras訓練好的深度學習模型進行inference,模型的輸入是Numpy數組。主要考慮幾點:1).Java這邊可以方便的打包成Jar包,方便部署,比如作為 spark 的 job 運行。2). Python這邊如果要安裝額外的庫,安裝方式越簡單越好。
針對1).首先考慮的有deeplearning4j,可以通過maven使用。其次是Jython,Jep等工具提供了Java直接運行python代碼的功能;再其次是完全通過網絡來傳遞參數獲取返回結果。另外,可考慮的是如果采用了Tensorflow訓練模型,可以保存為Tensorflow模型,然后使用Java接口直接來調用。

deeplearning4j

deeplearning4j是一個Java語言的深度學習庫,其能夠與Spark框架對接。并且提供了導入keras模型的功能,然而對keras模型的支持并不完善,很多層還沒有實現,尤其是keras2的出現,deeplearning4j支持情況很差。

Jython

Jython是純Java實現的Jython VM。Jython在import 一個Python文件的時候,會編譯生成.class文件,而不是.pyc文件。
使用Jython可以運行純python實現的python庫,無法使用用C寫的Python擴展庫,因為沒有在ABI層兼容CPython。
Jython調用第三方的庫,如自己編寫的庫,需要將包路徑添加到sys.path中。
maven:

<dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.1</version> </dependency>

Jep 是一個能夠讓Python和Java互相調用的軟件包。可以使用CPython的擴展包,如Numpy和Pandas。其可以將Java的數組自動轉換為numpy數組。
在使用pip install jep安裝時需要編譯本地模塊。


RPC

對上面的工具都不滿意,只能走一些其它路子了。想到跨語言、跨平臺、數據交換等概念時自然容易想到JSON、XML、RPC這些詞。那么采用遠程過程調用是一種不錯的方式。各種語言都有遠程過程調用的工具,如Java的RMI,對象被序列化后通過網絡傳輸。序列化可以是任意形式,JSON、XML或者自定義的格式。JSON-RPC-2.0的規范定義比較簡單,可以為我們所使用。

RPC-server (Python)

建立TCP server監聽連接,在每個連接中按照JSON-RPC 2.0規范解讀和發送內容。建立函數名稱到函數的map,這些函數供Java調用。函數的參數需要是一些基本類型,如果原來的參數是numpy數組,可以改成一維數組,再加額外個參數表示維度信息,如行數和列數。然后在函數中進行reshape,復制到numpy數組。

RPC-client (Java)

建立到RPC-server的socket連接,使用com.thetransactioncompany.jsonrpc2包向RPC-server發送請求。
參數傳遞可以使用Java的Map,會映射到Python的dict。

鏈接

  • 本文代碼地址: github.com/makefile/py4j-rpc
  • https://scito.ch/content/fast-remote-procedure-calls-python-introducing-new-json-rpc-stream-protocol
  • http://software.dzhuvinov.com/json-rpc-2.0-base.html
  • https://ws.apache.org/xmlrpc/client.html
  • http://archive.apache.org/dist/ws/xmlrpc/

轉載于:https://www.cnblogs.com/makefile/p/py4j.html

總結

以上是生活随笔為你收集整理的Py4j-RPC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。