鍍金池/ 問(wèn)答/Java  Python  Linux/ java客戶(hù)端調(diào)用python的restful接口,處理時(shí)間特別長(zhǎng)

java客戶(hù)端調(diào)用python的restful接口,處理時(shí)間特別長(zhǎng)

from __future__ import unicode_literals

#from flask_restful import reqparse,Api, Resource
from flask_restful import Api
from flask import Flask,request

#from flask import abort
#from flask import make_response,Response  
import json
#import tab
import time
#########test/product==========
import re
#####放在11.41庫(kù)
import jieba
import os
import jieba.analyse

app = Flask(__name__)
app.debug = True
app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
api = Api(app)

def abspath(filename):
    basedir = '/home/nlp/model/IF'
    return os.path.join(basedir, filename)

print ('IFFile is loading ......')
from sklearn.externals import joblib
IFclf = joblib.load(abspath("model.m"))
IFvec = joblib.load(abspath("vec.m"))
IFtransformer = joblib.load(abspath("tfidf.m"))
IFch2 = joblib.load(abspath("ch2.m"))
print ('IFFile loading successful')

print ('IFkeyword is loading ......')
keywords = "P2P|p2p|比特幣|余額寶|融租租賃|支付機(jī)構(gòu)|支付寶|數(shù)字貨幣|保險(xiǎn).*互聯(lián)網(wǎng)|加密貨幣|愉悅資本.*平臺(tái)\
|虛擬貨幣|科技金融|金融科技|點(diǎn)牛金融|普惠金融|互金|現(xiàn)金貸|區(qū)塊鏈"
print ('IFkeyword loading successful')

@app.route('/')
def hello_world():  
    return 'hello world'

@app.route('/SVM_TextSort/', methods=['POST'])
def add_task():
    time_start=time.time()   
    url = request.json['siteDomain']
    lable = ''
    if 'guba' in url:
        lable = ''  
        print ('svm file contain guba')
    else:
        text = request.json['content']
        title = request.json['title']
        print ('svm data receive successful')
        
        content = title + text       
        word_cut = jieba.lcut(content.strip(), cut_all = False)       
        news1 = []
        news1.append(' '.join(word_cut))                            
        x_test11 = IFvec.transform(news1)               
        x_test21 = IFtransformer.transform(x_test11)
        X_test1 = IFch2.transform(x_test21)          
        y1 = IFclf.predict(X_test1)
        print ('svm model judge successful')
        if y1[0] == 0:
            key = re.findall(keywords,title)
            if key:
                lable = lable + '互聯(lián)網(wǎng)金融'
            else:
                lable = '' 
        else:
            lable = lable + '互聯(lián)網(wǎng)金融'

    rt = {'SVM_TextSort':lable}
    
    print ('svm change json successful')
    
    time_end=time.time()
    print ('svm totally cost',time_end-time_start)
    return json.dumps(rt)


if __name__ == '__main__':
    app.run(host = '0.0.0.0')

各位大佬好,我用如上的方法寫(xiě)了一個(gè)接口,在java端調(diào)用這個(gè)方法時(shí),處理速度特別慢,有時(shí)會(huì)達(dá)到120s;我在本地用python測(cè)試該方法,一個(gè)文本所需時(shí)間在0.02s左右,為啥通過(guò)java調(diào)用會(huì)出現(xiàn)這么長(zhǎng)的時(shí)長(zhǎng),求大佬告知,下面是java端調(diào)用py restful接口的代碼

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

/**
 * 〈一句話功能簡(jiǎn)述〉
 * 〈POST測(cè)試〉
 *
 * @author XAYQ-ZhaoXiaoXu
 * @create 2018/5/7
 * @since 1.0.0
 */
public class PostTest {

    private static String URL = "http://172.22.11.41:5000/SVM_TextSort/";
//    private static String URL = "http://172.22.11.41:5000/lable_person/";
//    private static String URL = "http://172.22.8.81:5000/lable_person/";

    public static void main(String[] args) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("siteDomain", "www.sugarinfo.net");
        params.put("title", "今天好熱");
//        params.put("content", "人工智能的興起、應(yīng)用以及與平臺(tái)大數(shù)據(jù)的深度融合,正在加快金融生態(tài)的智能化發(fā)展。   1月18日下午,上海拍拍貸金融信息服務(wù)有限公司(NYSE:PPDF,以下簡(jiǎn)稱(chēng)拍拍貸)創(chuàng)始人、CEO張俊在拍拍貸主辦的“智慧金融研究院成立暨2018年智慧金融高峰論壇”上宣布,拍拍貸將在未來(lái)三年內(nèi)為智慧金融研究院注入10億元資金,在智慧金融研究院之下成立人工智能、區(qū)塊鏈、金融云、大數(shù)據(jù)等四大研究中心,讓智慧金融研究院真正做到“金融觸手可及”的目標(biāo)。與此同時(shí),張俊還在現(xiàn)場(chǎng)任命拍拍貸首席風(fēng)險(xiǎn)官兼首席數(shù)據(jù)官顧鳴擔(dān)任智慧金融研究院院長(zhǎng)。   據(jù)悉,在中國(guó)的金融科技創(chuàng)業(yè)公司中,拍拍貸是迄今為止第一家將“十億元”級(jí)別資金投入到智慧金融研發(fā)領(lǐng)域的企業(yè),全力推進(jìn)金融科技的進(jìn)步,來(lái)為近14億中國(guó)人提供更普惠的金融服務(wù)。   未來(lái)三年投入10億元資金\n" +
//                "根據(jù)此前業(yè)內(nèi)人士的說(shuō)法,在P2P方面,分散化市場(chǎng)結(jié)構(gòu)利于普惠金融,主體行為日漸體現(xiàn)出普惠特性,貸款投向的普惠特性日益顯著。   作為論壇主辦方,張俊強(qiáng)調(diào)了拍拍貸是一家以普惠金融為理念的金融科技企業(yè)?!斑^(guò)去十年,我們一直靠技術(shù)推動(dòng)業(yè)務(wù)發(fā)展,推動(dòng)我們的效率提升,推動(dòng)產(chǎn)品體驗(yàn)不斷提升。未來(lái),我們會(huì)繼續(xù)堅(jiān)持這樣的道路,會(huì)在更前沿的角度研究應(yīng)用探索更先進(jìn)的技術(shù)。”   張俊此次還特別就金融科技(FinTech)與智慧金融(Smart Finance)的區(qū)別做出說(shuō)明。所謂智慧金融是指通過(guò)前沿技術(shù)推動(dòng)金融全流程智慧化,使金融服務(wù)更加聰明、普惠并觸手可及。他希望智慧金融研究院的成立可以達(dá)到兩個(gè)目的:首先,希望通過(guò)科技賦能能夠讓行業(yè)讓金融服務(wù)向著真正的未來(lái),向著更智慧的方向發(fā)展;其次,希望通過(guò)科技賦能監(jiān)管,積極同監(jiān)管合作,讓監(jiān)管更有效地監(jiān)管行業(yè),讓行業(yè)更健康、更持續(xù)地發(fā)展。   另?yè)?jù)顧鳴的說(shuō)法,智慧金融研究院將立足人工智能、大數(shù)據(jù)、云計(jì)算、區(qū)塊鏈等前沿金融科技的研究和探索,除計(jì)劃未來(lái)三年投入的10億元資金建立研究中心外,還將與工信部中國(guó)電子商務(wù)協(xié)會(huì)互聯(lián)網(wǎng)金融研究院、浙江大學(xué)計(jì)算機(jī)學(xué)院人工智能研究所、新加坡國(guó)立大學(xué)計(jì)算機(jī)學(xué)院社交網(wǎng)絡(luò)實(shí)驗(yàn)室等開(kāi)展聯(lián)合研究項(xiàng)目,著力打造金融科技孵化器等,致力推動(dòng)金融全流程智慧化,使金融服務(wù)更加普惠和觸手可及。");
        params.put("content", "11111111111111111111");
        System.out.println(System.currentTimeMillis());
        try {
            //創(chuàng)建連接
            URL url = new URL(URL);// 創(chuàng)建連接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestMethod("POST");                                // 設(shè)置請(qǐng)求方式
            connection.setRequestProperty("Accept", "application/json");        // 設(shè)置接收數(shù)據(jù)的格式
            connection.setRequestProperty("Content-Type", "application/json");  // 設(shè)置發(fā)送數(shù)據(jù)的格式
            connection.connect();


            //發(fā)送數(shù)據(jù)
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8編碼
            out.append(JSON.toJSONString(params));
            out.flush();
            out.close();

            int code = connection.getResponseCode();
            InputStream is;
            if (code == 200) {
                System.out.println("連接成功");
                is = connection.getInputStream();
            } else {
                System.out.println("連接失?。? + code);
                is = connection.getErrorStream();
                return;
            }

            System.out.println(System.currentTimeMillis());

            // 讀取響應(yīng)
            int length = connection.getContentLength();// 獲取長(zhǎng)度
            if (length != -1) {
                byte[] data = new byte[length];
                byte[] temp = new byte[512];
                int readLen = 0;
                int destPos = 0;
                while ((readLen = is.read(temp)) > 0) {
                    System.arraycopy(temp, 0, data, destPos, readLen);
                    destPos += readLen;
                }
                String result = new String(data, "UTF-8"); // utf-8編碼
                Map<String, Object> ret = JSON.parseObject(result, new TypeReference<Map<String, Object>>(){});
                System.out.println(ret);
//                if (ret.get("SVM_TextSort") == null) {
//                    System.out.println("11111111111111111");
//                } else {
//                    System.out.println("2122222222222222222");
//                }
//                System.out.println(ret.get("SVM_TextSort"));

                //SVM_CHANNEL相關(guān)
                List<String> svmChannelList = new ArrayList<String>();
                if (svmChannelList.isEmpty()) {
                    System.out.println("222222222222222222");
                }
                //返回SVM_CHANNEL值不為空時(shí)執(zhí)行
                if (ret.get("SVM_TextSort") != null) {
                    String str = ret.get("SVM_TextSort").toString().trim();
                    if (str.contains(",")) {
                        //對(duì)多標(biāo)簽進(jìn)行轉(zhuǎn)換
                        svmChannelList = Arrays.asList(str.split(","));
                    } else {
                        //只有一個(gè)標(biāo)簽或沒(méi)有標(biāo)簽
                        svmChannelList = Collections.singletonList(str);
                    }
                    if (!svmChannelList.isEmpty()) {
                        System.out.println("11111111111111111111111");
                    }
                }
            }
            System.out.println(System.currentTimeMillis());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
回答
編輯回答
萌面人

load model 可能比較長(zhǎng)吧

2017年8月12日 18:34