Webサービスを利用してモデル常駐メモリを実現する簡単な方法
7203 ワード
pythonのウェブサービスを利用してモデル常駐メモリを迅速に実現する方法はlowですが、本当に迅速で、30分でも実現できます.
1、背景
この間、phpで微信サーバから送信されたメッセージを受信し、python機能論理プロセッサにメッセージを送信する必要があった.前期はphpを直接使用してpythonプログラムを呼び出し、pythonプログラムはモデルロード、メッセージ処理を行い、phpに戻ります.このようなプロセスを利用すると,処理プロセスが遅くなくても難しい.しかし、このような流れに従わなければならないので、以前に訓練したモデルをメモリに常駐させることができるかどうかを考えてみましょう.ネットを見ると、解決策はたくさんありますが、socket通信を利用したり、クライアント/サーバモードを作ったりすることができます.これらの方法は非常に良いですが、実現には複雑です.だからこの方法を思いついた.
2、全体の考え方
主にpythonとそのflaskライブラリで実現されます.主な考え方は以下の点です. php呼び出しpythonプログラムをphpに変更し、getまたはpostメソッドを介してpythonに要求を送信する. pythonプログラムをwebサービスモードに変更し、実行するとモデルをロードし、ずっと実行させます. pythonは要求を受信し、処理し、結果を返す.
FlaskはPythonで作成された軽量級Webアプリケーションフレームワークで、getまたはpostリクエストを処理しながらrequestを導入する必要があるため、pythonで導入するだけでよい.次にフローに従ってコードを記述すればよい.主な手順は以下の通りである:(1)flaskの簡単な実験*パッケージを導入してflask応用を作成するメソッド を定義する実行アプリケーション
完全なコード:
このときこのプログラムを実行する、ブラウザのアドレスバーに:127.0と入力.0.1:5000/hello、ブラウザにhello worldが表示されます.では、次のことは簡単です.上のロードモデルと処理要求部分のコードを少し修正するだけでいいです.ロードモデル は、要求を受信し、 を処理する.
(2)phpとpythonの間の通信上のプログラムがずっと実行されているので、このurlアドレスでpythonプログラムに要求を送信することができる.phpでgetまたはpost要求を構築する方法は、phpのcurlを利用してpostとget要求を実現する別の文章を参照することができ、これによりphpとpythonの間の通信が実現され、linuxであればtmuxセッションウィンドウを作成して実行することができる上のpythonプログラムは、ずっと実行されています.
3、完全なコード PHP Python
4、関連リンク
【1】Flaskクイックエントリー【2】phpのcurlでpostとgetリクエストを実現
1、背景
この間、phpで微信サーバから送信されたメッセージを受信し、python機能論理プロセッサにメッセージを送信する必要があった.前期はphpを直接使用してpythonプログラムを呼び出し、pythonプログラムはモデルロード、メッセージ処理を行い、phpに戻ります.このようなプロセスを利用すると,処理プロセスが遅くなくても難しい.しかし、このような流れに従わなければならないので、以前に訓練したモデルをメモリに常駐させることができるかどうかを考えてみましょう.ネットを見ると、解決策はたくさんありますが、socket通信を利用したり、クライアント/サーバモードを作ったりすることができます.これらの方法は非常に良いですが、実現には複雑です.だからこの方法を思いついた.
2、全体の考え方
主にpythonとそのflaskライブラリで実現されます.主な考え方は以下の点です.
FlaskはPythonで作成された軽量級Webアプリケーションフレームワークで、getまたはpostリクエストを処理しながらrequestを導入する必要があるため、pythonで導入するだけでよい.次にフローに従ってコードを記述すればよい.主な手順は以下の通りである:(1)flaskの簡単な実験*パッケージを導入してflask応用を作成する
from flask import Flask,request
app = Flask(__name__)
def hello():
print("hello world")
app.debug = True
app.run()
完全なコード:
from flask import Flask,request
app = Flask(__name__)
#
#
@app.route('/hello')
def hello():
return("hello world")
if __name__ == '__main__':
app.debug = True
app.run()
このときこのプログラムを実行する、ブラウザのアドレスバーに:127.0と入力.0.1:5000/hello、ブラウザにhello worldが表示されます.では、次のことは簡単です.上のロードモデルと処理要求部分のコードを少し修正するだけでいいです.
model= load_model_to_memory() #
#
@app.route('/deal', methods=['GET'])
def deal():
# php
question = request.args.get('question',"default question") #
#
question=urllib.parse.unquote(question)
result = main_function(model) #
#
return (urllib.parse.quote(result))
(2)phpとpythonの間の通信上のプログラムがずっと実行されているので、このurlアドレスでpythonプログラムに要求を送信することができる.phpでgetまたはpost要求を構築する方法は、phpのcurlを利用してpostとget要求を実現する別の文章を参照することができ、これによりphpとpythonの間の通信が実現され、linuxであればtmuxセッションウィンドウを作成して実行することができる上のpythonプログラムは、ずっと実行されています.
3、完全なコード
// get python web
public static function send_question_to_python_get($request)
{
// python url
$base_url="http://127.0.0.1:5000/login?question=";
// ,
$question=$request['content'];
$en_question=urlencode($question);
$url=$base_url.$en_question;
$ch = curl_init();
// , URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// ssl
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// HTML
$output = curl_exec($ch);
$output=urldecode($output);
// curl
curl_close($ch);
return $output;
}
from flask import Flask,url_for,request
import urllib.parse
app = Flask(__name__)
#
model = load_model_to_memory()
#
@app.route('/deal', methods=['GET'])
def deal():
# php
question = request.args.get('question',"default question") #
#
question=urllib.parse.unquote(question)
result = main_function(model) #
#
return (urllib.parse.quote(result))
if __name__ == '__main__':
app.debug = True
app.run()
4、関連リンク
【1】Flaskクイックエントリー【2】phpのcurlでpostとgetリクエストを実現