`

调用算法,监听算法结束

阅读更多
public class BlockQueueService {

    private static final Logger logger = LoggerFactory.getLogger(BlockQueueService.class);
    private static final long MILLILS = 120000;
    private BlockingQueue<String> receivedImg = new LinkedBlockingQueue<>();


    /**
     * 添加解读任务
     * @throws InterruptedException
     */
    public void addUnscrambleTask(String img) throws InterruptedException {
        receivedImg.put(img);
    }


    /**
     * 启动线程
     */
    public BlockQueueService()  {
        execAlgorithmThread.start();
    }


    /**
     * 执行算法的线程
     */
    Thread execAlgorithmThread = new Thread() {
        @Override
        public void run() {
            while (true) {
                try {
                    String sheetAnalysisInfos = receivedImg.take();
                    execAlgorithm(sheetAnalysisInfos);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        /**
         * 执行算法
         * @param
         */
        private void execAlgorithm(String receivedImg) {
            try {
                    //执行算法解读
                    doPost(receivedImg);
            }catch (Exception e){
                logger.error("execAlgorithm ocr unscramble Exception" , e);
            }

        }
    };


    public void doPost(String filePath){
        String xmlDir = filePath.replace(jpgDir,"");
        xmlDir =rootDir + correctDir +xmlDir.substring(0,xmlDir.lastIndexOf("."))+".xml";
        logger.info("filePath的路径 "+ filePath);
        logger.info("xmlDir的路径" + xmlDir);
        HashMap map = new HashMap();
        map.put("imgPath",filePath);
        map.put("xmlPath",xmlDir);
        String url = "http://############/execAlgorithm";
        int result = 0;
        try {
            result = HttpClient.doPost(url,map);
            logger.info("------- result ---------- 是否为1");
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("-------execAlgorithm----------判断解析后是否生成对应的XML文件");
        if (result==1){
            logger.info("解析生成对应的XML文件");
        }
        File file = new File(xmlDir);
        if (!file.exists()){
            logger.info("AI解析未生成对应的XML文件");
            writeXml(xmlDir);
            logger.info("生成对应的错误XML文件"+xmlDir);
        }
        logger.info("-------execAlgorithm----------释放资源");
    }


    public void doCmd(String filePath){
        String pythonDir = "bone_age_interface.py";
        String pythonpath = "/boneage_data/BoneAge/";
        String xmlDir = filePath.replace(jpgDir,"");
        xmlDir =rootDir + correctDir +xmlDir.substring(0,xmlDir.lastIndexOf("."))+".xml";
        String cmd = "python" + " " + pythonDir + " " + filePath + " " + xmlDir;
        logger.info(cmd + "命令");
        Runtime run = Runtime.getRuntime();
        Process proc = null;
        try {
            proc = run.exec("/bin/bash");
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (proc != null) {
            PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
            printWriter.println("cd " + pythonpath);
            printWriter.println(cmd);
            printWriter.println("exit");
            WorkerThread worker = null;
            try {
                worker = new WorkerThread(proc);
                worker.start();
                worker.join(MILLILS);
                if (worker.exit != null) {
                    logger.info("-------execAlgorithm----------解析完成");
                } else {
                    throw new TimeoutException();
                }
            } catch (InterruptedException ex) {
                worker.interrupt();
                Thread.currentThread().interrupt();
                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                logger.info("-------execAlgorithm----------判断解析后是否生成对应的XML文件");
                File file = new File(xmlDir);
                boolean result = file.exists();
                if (result) {
                    logger.info("解析生成对应的XML文件");
                } else {
                    logger.info("解析未生成对应的XML文件");
                    writeXml(xmlDir);
                    logger.info("生成对应的错误XML文件"+xmlDir);
                }
                logger.info("-------execAlgorithm----------释放资源");
                printWriter.close();
                proc.destroy();
            }

        }
    }


    private class WorkerThread extends Thread {
        private Process process;
        private Integer exit;

        private WorkerThread(Process process) {
            this.process = process;
        }

        public void run() {
            try {
                logger.info("exit初始化" + exit);
                exit = process.waitFor();
                logger.info("exit在运行完之后" + exit);
            } catch (InterruptedException ignore) {
                return;
            }
        }
    }
}
 
分享到:
评论

相关推荐

    论文研究-基于蒙特卡罗算法的点覆盖问题解决方法.pdf

    在WASN (wireless Ad hoc sensor network)中,点覆盖是一个基本问题。...反复调用该算法五次,可以使覆盖质量评估算法的正确率达到99%,从而可以有效解决无线传感器网络中的点覆盖问题。模拟证明该算法是可行的。

    基于netty + SpringBoot仿照dubbo手动实现RPC远程本地无感知调用项目源码

    ​ 基于netty的网络传输实现远程本地调用,无感知远程调用。 该版本涉及: netty JDK动态代理。 Spring 的扫描原理(@CompanScan,@MapperScan 同理) Spring的事件监听与处理, 反射,SpringListener 配置,...

    KLuban:Lifecycle + Kotlin 协程 + flow + LiveData + Glide 识别和内存优化 + Luban采样算法 = KLuban图片压缩

    本项目是基于Luban算法,重构后实现的图片压缩框架KLuban 使用Kotlin + 协程 + Flow(并行任务) + LiveData(监听回调) + Glide图片识别和内存优化 + 邻近(鲁班)、双线性采样图片算法压缩框架,欢迎改进 fork 和 star...

    leetcode手册JAVA-Algos:著名算法问题的解决方案

    要继续执行文件,请按“c”然后输入:它会说:调试监听 blabla 然后: c(这是继续的缩写) 要启动“repl”会话,请键入“repl”,然后按“enter” 复制 它会显示我们的 str 返回后将代码复制粘贴到函数中 你的代码 ...

    consul 中文开发指南

    支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持. 支持健康检查. ...

    python统计mysql数据量变化并调用接口告警的示例代码

    统计每天的数据量变化,数据量变动超过一定范围时,进行告警。告警通过把对应的参数传递至相应接口。 python程序如下 #!/usr/bin/python # coding=utf-8 import pymysql as mdb import os import sys ...

    信息系统安全考题.pdf

    (A) A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 2. (单选题)为了防御网络监听,最常用的方法是:(B) A、采用物理传输(非网络) B、信息加密 C、无线网 D、使用专线传输 3.(单选题)一个数据包过滤...

    网络安全实验报告完整.doc

    二、 主要内容 实验一加密认证通信系统实现 设计实现一个通信系统,双方可以通过消息和文件通信,用户可选择一种加密算法和 认证算法,对消息和文件进行加密通信和完整性验证。(要实现认证和加密,工具和语 言不限...

    Java版计算器

    其次,要实现计算器的功能,关键是掌握各个功能的算法,再将各个算法(行为)与按钮绑定,并且注册监听者。 在选择界面实现策略时,我还是选择了swing,因为Swing包在图形界面设计上比AWT更丰富,更美观,比较...

    网络安全试题及答案.doc

    A、缓冲区溢出 B、网络监听 C、端口扫描 D、IP欺骗 16、使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常 服务,这属于[ ]漏洞 A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 17...

    java程序设计填空题题库49道

    48. 线程的启动是通过调用其______________方法而实现的。 答案:start() [考点范围] 线程 49. Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,分别用Thread类中的类常量表示,每个...

    Java计算器实验报告(1).doc

    编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行...

    计算机网络安全题库(67道).docx

    ——[单选题] A 入网访问控制 B 网络权限控制 C 目录级安全控制 D 属性安全控制 正确答案:A 4、以下算法属于非对称算法的是()——[单选题] A Hash算法 B RSA算法 C IDEA D 三重DES 正确答案:B 5、在程序编写防范...

    网络安全复习题(1).doc

    使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务 ,这属于【A】漏洞 (A)拒绝服务 (B)文件共享 (C)BIND漏洞 (D)远程过程调用 26. 以下哪种特点是代理服务所具备的【A】。 ...

    KJFrameForAndroid快速开发框架

    Topology拓扑部分 包含一个使用IOC设计思想的控件初始化方式:可通过注解的方式进行UI绑定,与设置监听,在Activity和Fragment中均可以通过一行代码绑定控件并实现点击监听;还包含了在目前应用开发中常见的布局界面...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传 |--多线程之AsyncTask的用法 |--多线程之线程池ExecutorService |--字体为粗体 |--安卓...

    design-pattern-forjava.zip

    23,策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类于使用算法类之间的耦合。 24,模板方法: 通过把...

    上机实验-2 (1).doc

    当可运行对象排在事件派发队列的队首时,就调用其run方法 public void run() { try { final Test1 frame = new Test1();//捕获异常 frame.setVisible(true); } catch (final Exception e) { e.printStackTrace...

    大型分布式网站架构与实践

     如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适应何种场景。  如何实现服务的动态注册和路由,以及软负载均衡的实现。  1.1 基于TCP协议的RPC 3  1.1.1 RPC名词解释 3  1.1.2 对象的...

Global site tag (gtag.js) - Google Analytics