javaweb调用python算法_请教怎么用java远程调用python? 多谢
請問如何用java遠程調用python? 謝謝!
本帖最后由 blackkettle 于 2015-05-07 13:00:41 編輯
比如有一臺機器?A上安裝了python,?另一臺機器B要用java?調用A?上的python的某個函數,輸入數據在B機器上,所有的計算在A機器完成,結果返回給B機器。
請問這個怎么實現?
希望大俠能給一個簡單的demo,?非常感謝!
------解決思路----------------------
在A機器上搭建一個服務,可以采用socket、webservice、httppost等方式提供服務,在服務中接收到請求后調用python,并將結果返回
在B機器上開發一個終端調用A機器上的服務即可。
------解決思路----------------------
我也是新人
不過遠程的話,可以用服務器+同步\異步交互,建議是Apache+JSON
------解決思路----------------------
socket:?直接用socket.?自己定義協議:?函數名,?參數值會怎么傳遞,?返回值要怎么傳遞等.
http:?用http協議,?函數名,?參數值等可以用GET/POST的參數傳遞.?但你要自己把復雜些的值(字典,?列表等)序列化(pickle,?json等)
python有很多web?framework,?也可以用自帶的httpserver
rpc:?把上面的東西都包裝起來,?用起來很像直接的函數調用.
文檔(https://docs.python.org/2/library/xmlrpclib.html),?里面有例子,?也可以自己搜python+模塊名.
例子,?服務器端:
import?xmlrpclib
from?SimpleXMLRPCServer?import?SimpleXMLRPCServer
def?is_even(n):
return?n%2?==?0
server?=?SimpleXMLRPCServer(("localhost",?8000))
print?"Listening?on?port?8000..."
server.register_function(is_even,?"is_even")
server.serve_forever()
客戶端代碼:?(但你得換成java的版本,?搜java+rpc)
import?xmlrpclib
proxy?=?xmlrpclib.ServerProxy("http://localhost:8000/")
print?"3?is?even:?%s"?%?str(proxy.is_even(3))
print?"100?is?even:?%s"?%?str(proxy.is_even(100))
------解決思路----------------------
客戶端沒法強迫服務器端做什么(惡意入侵除外),?所以必須server主動提供一些函數,?client才能調用.
server提供的函數不一定要是自己實現的,?也可以是從其他模塊import來的.?參見下面的例子(sqrt,?date.today).
下面的例子里還包括了一種情況,?需要傳輸的值(這兒是date?object)rpc模塊不知道怎么序列化,?這時需要你自己把它轉變成能序列化的類型,?在另一端再轉回來.
服務器:
#?encoding:?utf-8
import?xmlrpclib
from?SimpleXMLRPCServer?import?SimpleXMLRPCServer
from?datetime?import?date
from?math?import?sqrt
def?is_even(n):
return?n%2?==?0
server?=?SimpleXMLRPCServer(("localhost",?8000))
print?"Listening?on?port?8000..."
server.register_function(is_even,?"is_even")
server.register_function(sqrt,?'kaipingfang')
#?next?one?will?not?work?since?xmlrpclib?don't?know?how?to?marshal?date?object
server.register_function(date.today,?'today')
def?today_in_string():
return?str(date.today())
server.register_function(today_in_string,?'mytoday')
server.serve_forever()
客戶端:
#?encoding:?utf-8
import?xmlrpclib
proxy?=?xmlrpclib.ServerProxy("http://localhost:8000/")
print?"3?is?even:?%s"?%?str(proxy.is_even(3))
print?"100?is?even:?%s"?%?str(proxy.is_even(100))
print?"sqrt?of?10:?%s"?%?str(proxy.kaipingfang(10))
try:?#?the?bad?function
print?"today?is:?%s"?%?str(proxy.today())
except?Exception?as?e:
print?e
print?"today?in?string?is:?%s"?%?proxy.mytoday()
總結
以上是生活随笔為你收集整理的javaweb调用python算法_请教怎么用java远程调用python? 多谢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视而不见打一字 谜语介绍
- 下一篇: python scratch unity