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応用を作成する
    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、完全なコード
  • PHP
  • //   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;
        }
  • Python
  • 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リクエストを実現