У меня большой текстовый файл для обработки. Метод parse () пытается использовать несколько потоков для отправки запросов в релакс-сервис для получения результатов. Для каждого inputInfo он должен возвращать ExtractedInfo после обработки.
private ExecutorService executorService = Executors.newFixedThreadPool(10);
public ExtractedInfo parse(InputInfo inputInfo) {
ExtractedInfo extractedInfo = new ExtractedInfo();
String inputText = inputInfo.getText();
Callable<String> parseTask = () -> this.executeTask(inputText);
Future<String> parseService = executorService.submit(parseTask);
String result = null;
try {
result = parseService.get(Parameters.getParserTimeLimit(), TimeUnit.MILLISECONDS);
} catch (ExecutionException | InterruptedException e) {
LOGGER.warn("ExecutionException | InterruptedException");
e.printStackTrace();
} catch (TimeoutException te) {
parseService.cancel(true);
LOGGER.warn("NLP parser time out for {} {} {}", sku, inputText, msgId);
}
if (result != null) {
extractedInfo.setResult(result);
}
return extractedInfo;
}
Закрытый метод executeTask отправляет запросы в restful-сервис, который обрабатывается приложением python.
private String executeTask(String inputText) {
String jsonOutput = null;
String urlStr = null;
try {
String encodedInputText = URLEncoder.encode("\"" + inputText + "\"", "UTF-8");
urlStr = parserServerSelection();
URL url = new URL(urlStr + encodedInputText);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
jsonOutput = in.readLine();
in.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonOutput;
}
Это правильный способ сделать это?