java客户端调用python的restful接口,处理时间特别长

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库
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|比特币|余额宝|融租租赁|支付机构|支付宝|数字货币|保险.*互联网|加密货币|愉悦资本.*平台\
|虚拟货币|科技金融|金融科技|点牛金融|普惠金融|互金|现金贷|区块链"
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 + '互联网金融'
            else:
                lable = '' 
        else:
            lable = lable + '互联网金融'

    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')

各位大佬好,我用如上的方法写了一个接口,在java端调用这个方法时,处理速度特别慢,有时会达到120s;我在本地用python测试该方法,一个文本所需时间在0.02s左右,为啥通过java调用会出现这么长的时长,求大佬告知,下面是java端调用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.*;

/**
 * 〈一句话功能简述〉
 * 〈POST测试〉
 *
 * @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", "人工智能的兴起、应用以及与平台大数据的深度融合,正在加快金融生态的智能化发展。   1月18日下午,上海拍拍贷金融信息服务有限公司(NYSE:PPDF,以下简称拍拍贷)创始人、CEO张俊在拍拍贷主办的“智慧金融研究院成立暨2018年智慧金融高峰论坛”上宣布,拍拍贷将在未来三年内为智慧金融研究院注入10亿元资金,在智慧金融研究院之下成立人工智能、区块链、金融云、大数据等四大研究中心,让智慧金融研究院真正做到“金融触手可及”的目标。与此同时,张俊还在现场任命拍拍贷首席风险官兼首席数据官顾鸣担任智慧金融研究院院长。   据悉,在中国的金融科技创业公司中,拍拍贷是迄今为止第一家将“十亿元”级别资金投入到智慧金融研发领域的企业,全力推进金融科技的进步,来为近14亿中国人提供更普惠的金融服务。   未来三年投入10亿元资金\n" +
//                "根据此前业内人士的说法,在P2P方面,分散化市场结构利于普惠金融,主体行为日渐体现出普惠特性,贷款投向的普惠特性日益显著。   作为论坛主办方,张俊强调了拍拍贷是一家以普惠金融为理念的金融科技企业。“过去十年,我们一直靠技术推动业务发展,推动我们的效率提升,推动产品体验不断提升。未来,我们会继续坚持这样的道路,会在更前沿的角度研究应用探索更先进的技术。”   张俊此次还特别就金融科技(FinTech)与智慧金融(Smart Finance)的区别做出说明。所谓智慧金融是指通过前沿技术推动金融全流程智慧化,使金融服务更加聪明、普惠并触手可及。他希望智慧金融研究院的成立可以达到两个目的:首先,希望通过科技赋能能够让行业让金融服务向着真正的未来,向着更智慧的方向发展;其次,希望通过科技赋能监管,积极同监管合作,让监管更有效地监管行业,让行业更健康、更持续地发展。   另据顾鸣的说法,智慧金融研究院将立足人工智能、大数据、云计算、区块链等前沿金融科技的研究和探索,除计划未来三年投入的10亿元资金建立研究中心外,还将与工信部中国电子商务协会互联网金融研究院、浙江大学计算机学院人工智能研究所、新加坡国立大学计算机学院社交网络实验室等开展联合研究项目,着力打造金融科技孵化器等,致力推动金融全流程智慧化,使金融服务更加普惠和触手可及。");
        params.put("content", "11111111111111111111");
        System.out.println(System.currentTimeMillis());
        try {
            //创建连接
            URL url = new URL(URL);// 创建连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestMethod("POST");                                // 设置请求方式
            connection.setRequestProperty("Accept", "application/json");        // 设置接收数据的格式
            connection.setRequestProperty("Content-Type", "application/json");  // 设置发送数据的格式
            connection.connect();


            //发送数据
            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());

            // 读取响应
            int length = connection.getContentLength();// 获取长度
            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相关
                List<String> svmChannelList = new ArrayList<String>();
                if (svmChannelList.isEmpty()) {
                    System.out.println("222222222222222222");
                }
                //返回SVM_CHANNEL值不为空时执行
                if (ret.get("SVM_TextSort") != null) {
                    String str = ret.get("SVM_TextSort").toString().trim();
                    if (str.contains(",")) {
                        //对多标签进行转换
                        svmChannelList = Arrays.asList(str.split(","));
                    } else {
                        //只有一个标签或没有标签
                        svmChannelList = Collections.singletonList(str);
                    }
                    if (!svmChannelList.isEmpty()) {
                        System.out.println("11111111111111111111111");
                    }
                }
            }
            System.out.println(System.currentTimeMillis());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
阅读 8.3k
1 个回答
新手上路,请多包涵

load model 可能比较长吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题