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;
}
}
}
}
分享到:
相关推荐
在WASN (wireless Ad hoc sensor network)中,点覆盖是一个基本问题。...反复调用该算法五次,可以使覆盖质量评估算法的正确率达到99%,从而可以有效解决无线传感器网络中的点覆盖问题。模拟证明该算法是可行的。
基于netty的网络传输实现远程本地调用,无感知远程调用。 该版本涉及: netty JDK动态代理。 Spring 的扫描原理(@CompanScan,@MapperScan 同理) Spring的事件监听与处理, 反射,SpringListener 配置,...
本项目是基于Luban算法,重构后实现的图片压缩框架KLuban 使用Kotlin + 协程 + Flow(并行任务) + LiveData(监听回调) + Glide图片识别和内存优化 + 邻近(鲁班)、双线性采样图片算法压缩框架,欢迎改进 fork 和 star...
要继续执行文件,请按“c”然后输入:它会说:调试监听 blabla 然后: c(这是继续的缩写) 要启动“repl”会话,请键入“repl”,然后按“enter” 复制 它会显示我们的 str 返回后将代码复制粘贴到函数中 你的代码 ...
支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持. 支持健康检查. ...
统计每天的数据量变化,数据量变动超过一定范围时,进行告警。告警通过把对应的参数传递至相应接口。 python程序如下 #!/usr/bin/python # coding=utf-8 import pymysql as mdb import os import sys ...
(A) A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 2. (单选题)为了防御网络监听,最常用的方法是:(B) A、采用物理传输(非网络) B、信息加密 C、无线网 D、使用专线传输 3.(单选题)一个数据包过滤...
二、 主要内容 实验一加密认证通信系统实现 设计实现一个通信系统,双方可以通过消息和文件通信,用户可选择一种加密算法和 认证算法,对消息和文件进行加密通信和完整性验证。(要实现认证和加密,工具和语 言不限...
其次,要实现计算器的功能,关键是掌握各个功能的算法,再将各个算法(行为)与按钮绑定,并且注册监听者。 在选择界面实现策略时,我还是选择了swing,因为Swing包在图形界面设计上比AWT更丰富,更美观,比较...
A、缓冲区溢出 B、网络监听 C、端口扫描 D、IP欺骗 16、使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常 服务,这属于[ ]漏洞 A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 17...
48. 线程的启动是通过调用其______________方法而实现的。 答案:start() [考点范围] 线程 49. Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,分别用Thread类中的类常量表示,每个...
编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行...
——[单选题] A 入网访问控制 B 网络权限控制 C 目录级安全控制 D 属性安全控制 正确答案:A 4、以下算法属于非对称算法的是()——[单选题] A Hash算法 B RSA算法 C IDEA D 三重DES 正确答案:B 5、在程序编写防范...
使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务 ,这属于【A】漏洞 (A)拒绝服务 (B)文件共享 (C)BIND漏洞 (D)远程过程调用 26. 以下哪种特点是代理服务所具备的【A】。 ...
Topology拓扑部分 包含一个使用IOC设计思想的控件初始化方式:可通过注解的方式进行UI绑定,与设置监听,在Activity和Fragment中均可以通过一行代码绑定控件并实现点击监听;还包含了在目前应用开发中常见的布局界面...
|--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传 |--多线程之AsyncTask的用法 |--多线程之线程池ExecutorService |--字体为粗体 |--安卓...
23,策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类于使用算法类之间的耦合。 24,模板方法: 通过把...
当可运行对象排在事件派发队列的队首时,就调用其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 对象的...