Это правильный способ использовать Callable? - PullRequest
0 голосов
/ 09 сентября 2018

У меня большой текстовый файл для обработки. Метод 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;
}

Это правильный способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...