腾讯云服务器实现Java客户端远程调用Linux服务器深度模型(Python)(下)

本文是系列文章的下篇,介绍如何改进Java客户端以实现远程调用Linux服务器上的深度学习模型。通过创建并发线程A、B、C,A启动模型,B与模型socket交互,B、C线程同步,根据question进行阻塞和唤醒。文中提供了调用run_model()启动线程、setQuestion()设置问题和getAnswer()获取回答的方法实现。
摘要由CSDN通过智能技术生成

转载请注明出处:https://blog.csdn.net/qq_33427047/article/details/80454815

上篇中已经实现了Java客户端远程调用Linux服务器深度模型并与之交互,本篇将对Java线程进行改进。


整个项目功能是:用户提问一个问题,client发送至server,返回answer。因此设计思路是:生成3个并发线程ABC:A用来启动模型;B用来和模型socket交互。与此同时,BC两个线程进行同步,依靠判断是否输入question来阻塞和唤醒。

已修改的代码如下:

/**
 * 这个是Java client和python server通信的实践,server运行的是Parlai问答模型
 * 这一版本是在服务器开启程序的情况下直接进行socket通信
 */
class Example {
    private String return_answer, answer = ""; //用来返回模型的答案
    private String guide_info = ""; //用来保存提示信息
    private String question = ""; //用户提出的问题
    private Socket socket; //client和服务器进行socket通信
    private InputStream is;
    private BufferedReader in;
    private OutputStream os;
    private PrintWriter pw;
    private int judge_answer = 0; //判断是否有答案,没有就继续等待

    public String getAnswer() {
        //线程启动后,一直监测有没有答案生成。有答案生成,标志judge_answer会被置为1
        while (true) {
            if(judge_answer != 0) {
                break;
            }
            try {
                Thread.sleep(500);
            } catch (Exception e) {}
        }
        return_answer = this.answer;
        this.answer = ""; //重置
        judge_answer = 0;
        return return_answer; //返回某问题对应的答案
    }

    //当有新问题时,赋值给this.question
    public void setQuestion(String question) {
        this.question = question;
    }

    @SuppressWarnings("finally")
    //与服务器模型进行socket连接
    public String conn2server(String ip, int port) {
        this.guide_info = "";
        System.out.println("Socket connecting...");
        try {
            this.socket = new Socket(ip, port);

            this.is = this.socket.get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值