python对外接口环境配置(linux)

来源:互联网 发布:骁龙优化的浏览器 编辑:程序博客网 时间:2024/05/24 05:04

一、安装java

略1.8版本

二、安装Python

查询python版本:python -V

CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上。

checking for python... /usr/bin/pythonchecking for python >= 2.7... not foundconfigure: error: found python 2.6.6 (/usr/bin/python); required >= 2.7

yum中最新的也是Python 2.6.6,只能下载Python 2.7.9的源代码自己编译安装。

操作步骤如下:

1)安装devtoolset

yum groupinstall "Development tools"

2)安装编译Python需要的包包

yum install zlib-develyum install bzip2-develyum install openssl-develyum install ncurses-develyum install sqlite-devel

3)下载并解压Python 2.7.9的源代码

cd /optwget --no-check-certificate https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xztar xf Python-2.7.9.tar.xzcd Python-2.7.9

4)编译与安装Python 2.7.9

./configure --prefix=/usr/localmake && make altinstall

5)将python命令指向Python 2.7.9

ln -s /usr/local/bin/python2.7 /usr/local/bin/python

6)检查Python版本

shsh-4.1# python -VPython 2.7.9

三、安装Gearmand

需要python环境和CC++环境(检测linux默认:python -V | gcc -v)
Gearmand主要对python本地服务包装对外的可调用服务
先安装扩展包:http://www.cnblogs.com/ruanqin/p/5983660.html
1.yum install boost-devel* gperf* libevent-devel* libuuid-devel
2.下载安装 gearmand
wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz(下载)

tar zxvf gearmand(解压)

cd gearmand

./configure(运行默认配置)

make && make install(安装)

说明:gearmand服务启动
客户端 通过run.sh启动 启动向服务端告知 使服务端监控到translate的调度转到当前客户端的./translate.py下执行

#!/usr/bin/env bashfor ((i=0;i<15;i++))do    gearman -f translate -w -h 139.196.194.97 -- python ./translate.py &    gearman -f translate -w -h 139.196.192.104  -- python ./translate.py  &    sleep 5sdone

服务端:命令启动:

gearmand -p 4730 ##(指定端口)

四、管理python项目

cd /hzy/software/gearmand/
配置python工作区:
一、安装get-pip.py (python依赖包管理下载器)
1.下载该文件到工作区间 执行安装命令python get-pip.py
(python包管理器:https://pypi.python.org/pypi/pip)
2.通过下载包安装:Code of Conduct 下载pip-9.0.1.tar 到工作区间

tar -zxvf pip-9.0.1.tar(解压)cd /pip-9.0.1/     :>python setup.py build(执行编译)     :>python setup.py install(执行安装)

二、安装各种python依赖包(到工作区间目录)
1. 安装自然语言处理包
pip install nltk
2.下载自然语言数据包
vim downloadnltk.py(创建一个下载文件)

 import nltkprint "nltk download"nltk.download('wordnet') ##单词原型lemanltk.download('punkt')    ##单词tokennltk.download('averaged_perceptron_tagger')  ##单词词性pos part-of-speechnltk.download('stopwords')   ##停用词

执行下载数据包:
:>python downloadnltk.py (默认下载在用户目录下 /root/nltk_data/)

3.下载读取配置文件的包
:>pip install ConfigParser(命令行安装)
或者: 下载包安装:
下载:https://pypi.python.org/pypi/configparser/3.5.0
解压
build (python setup.py build)
install (python setup.py install)

#

一、总体打包:在gearmand-1.1.12目录上:

tar -zcvf gearmand_20170724.tar.gz --exclude=gearmand-1.1.12/nlp_tool/data --exclude=gearmand-1.1.12/nlp_tool/datafreq  --exclude=gearmand-1.1.12/translate/data --exclude=gearmand-1.1.12/translate/datafreq --exclude=gearmand-1.1.12/translate/log  gearmand-1.1.12

二、分项目对应
1.junor_three 作文评分

打包(排除某些目录):

tar -zcvf junor_three_20170724.tar.gz --exclude=junor_three/libs ----exclude=junor_three/libsA junor_three

上传:

>scp -r junor_three_20170724.tar.gz 127.0.0.1:/hzy/sad/ >password

解压:

tar -zxvf junor_three_20170724.tar.gz

2.nlp_tool 提取基础信息(词性 token 去除停用词 树形结构 依赖关系)

3.standford 放语言处理相关jar包

4.translate 口语评分

5.TOFEL 和1作文评分原理一致 评分接口

6.restaurant (特定情景下的对话)

7.offopic (判断偏题)

8.IELTS(雅思 和5原理一致 评分接口)

9.SCORE(托福和雅思一些公用的方法 5和8的调用)

五、java调用gearmand服务端

包含包:java-gearman-service-0.6.6.jar
json-lib-2.4-jdk15.jar
GearmanUtil类

package com.langying.utils;import java.util.HashMap;import java.util.Map;import java.util.concurrent.Callable;import org.gearman.Gearman;import org.gearman.GearmanClient;import org.gearman.GearmanJobEvent;import org.gearman.GearmanJobReturn;import org.gearman.GearmanServer;import net.sf.json.JSONObject;/** * Gearman工具类 * @author chuanye.wan * */public class GearmanUtil implements Callable<String> {    private String english;    private String translate;    private boolean detail;    public GearmanUtil(String english, String translate, boolean detail){        this.detail = detail;        this.english = english;        this.translate = translate;    }    @Override    public String call() throws Exception {        Map<String,Object> gearmanParam = new HashMap<String,Object>();        gearmanParam.put("translate", translate);        gearmanParam.put("english", english);        gearmanParam.put("detail", detail);        JSONObject jsonObj = JSONObject.fromObject(gearmanParam);        String content = jsonObj.toString();        return GearmanUtil.callGearman(content);    }    public static String callGearman(String content){        Gearman gearman = Gearman.createGearman();        GearmanClient client = gearman.createGearmanClient();        String serverAddress = Util.getProperty("gearmanconfig", "server_address");        int port = Integer.parseInt(Util.getProperty("gearmanconfig", "port"));        GearmanServer server = gearman.createGearmanServer(serverAddress, port);        client.addServer(server);        char[] ca = content.toCharArray();          for (int i = 0; i < content.length(); i++) {              if (ca[i] > 126 || ca[i] < 32){                content = content.replace(ca[i], ' ');            }        }          System.out.println("content:" + content);        GearmanJobReturn jobReturn = client.submitJob(Util.getProperty("gearmanconfig", "method"), content.getBytes());        String gearmanResult = null;        while (!jobReturn.isEOF()) {            GearmanJobEvent event = null;            try {                event = jobReturn.poll();            } catch (InterruptedException e) {                System.out.println("######################################-----CC---Exception#############################3");                e.printStackTrace();            }            switch (event.getEventType()) {                case GEARMAN_JOB_SUCCESS: // job执行成功                    gearmanResult = new String(event.getData());                    break;                case GEARMAN_SUBMIT_FAIL: // job提交失败                    System.err.println(event.getEventType() + ": "+ new String(event.getData()));                    break;                case GEARMAN_JOB_FAIL: // job执行失败                    System.err.println(event.getEventType() + ": "+ new String(event.getData()));                    break;                default:            }        }        gearman.shutdown();        return gearmanResult;    }    /**     * 针对人机只能对话的题型9     * @param content     *  @param functionName 调度方法名     * @return     */    public static String callGearmanForDialog(String content , String functionName){        Gearman gearman = Gearman.createGearman();        GearmanClient client = gearman.createGearmanClient();        String serverAddress = Util.getProperty("gearmanconfig", "server_address");        int port = Integer.parseInt(Util.getProperty("gearmanconfig", "port"));        GearmanServer server = gearman.createGearmanServer(serverAddress, port);        client.addServer(server);        char[] ca = content.toCharArray();          for (int i = 0; i < content.length(); i++) {              if (ca[i] > 126 || ca[i] < 32){                content = content.replace(ca[i], ' ');            }        }          GearmanJobReturn jobReturn = client.submitJob(functionName, content.getBytes());        String gearmanResult = null;        while (!jobReturn.isEOF()) {            GearmanJobEvent event = null;            try {                event = jobReturn.poll();            } catch (InterruptedException e) {                e.printStackTrace();            }            switch (event.getEventType()) {                case GEARMAN_JOB_SUCCESS: // job执行成功                    gearmanResult = new String(event.getData());                    break;                case GEARMAN_SUBMIT_FAIL: // job提交失败                    System.err.println(event.getEventType() + ": "+ new String(event.getData()));                    break;                case GEARMAN_JOB_FAIL: // job执行失败                    System.err.println(event.getEventType() + ": "+ new String(event.getData()));                    break;                default:            }        }        gearman.shutdown();        return gearmanResult;    }}

调度服务器gearmand 某个方法 并且传参数(参数都只能传一个且为byte型 所以 传参需要json格式 到python进行解析)
java调度gearmand服务端监控 服务端监控转发到注册的客户端gearmand client (多个注册则按注册顺序调度)
客户端gearmand 关联对应的python执行文件 python执行文件执行main函数并通过param_str = raw_input()获取 从而解析

#!/usr/bin/env python# coding:utf-8import osimport sysimport jsonimport timeimport tracebackimport datetimeimport randomsys.path.append("../nlp_tool/")from nlptool import Sentencesif __name__ == '__main__':    __current_path = os.path.split(os.path.realpath(__file__))[0]    log_file = os.path.join(__current_path, "log", repr(time.time()))    try:        __now = datetime.datetime.now()        param_str = raw_input()        param = json.loads(param_str)        if type(param['english']) == type([]):            result = {}            sents_0 = Sentences(param["translate"])            to_continue = True            if "type" in param.keys() and param["type"] == 3 and "pre_answer" in param.keys() and param["pre_answer"]:                sents_pre = Sentences(param["pre_answer"])                tags = [item[1] for item in (reduce(lambda v1, v2: v1 + v2, sents_0.tag())[0:4] + reduce(                    lambda v1, v2: v1 + v2, sents_pre.tag())[0:4])]                if "WP" not in tags and "WRB" not in tags and "WDT" not in tags:                    result["msg"] = u"至少有一句是特殊疑问句"                    # to_continue = False                elif sents_0 * sents_pre > 0.9:                    result["msg"] = u"句意可能存在重复"                    # to_continue = False            if not to_continue:                for i in range(len(param["english"])):                    result[i + 1] = 0            else:                for i in range(len(param["english"])):                    if param["english"][i]:                        if len(param["english"][i]) > 500:                            result[i + 1] = 0                        else:                            sents_1 = Sentences(param["english"][i])                            result[i + 1] = sents_0 * sents_1                    else:                        result[i + 1] = 0            print json.dumps(result),        else:            sents_1 = Sentences(param['translate'])            sents_2 = Sentences(param['english'])            print sents_1 * sents_2,        if (datetime.datetime.now() - __now).seconds > 60:            f = open(log_file, 'a')            f.write(param_str)            f.flush()            f.close()    except Exception, e:        f = open(log_file, 'a')        traceback.print_exc(file=f)        f.flush()        f.close()
原创粉丝点击