代码之家  ›  专栏  ›  技术社区  ›  user697911

这是使用Callable的正确方法吗?

  •  0
  • user697911  · 技术社区  · 7 年前

    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”将请求发送到由python应用程序处理的restful服务。

     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;
    }
    

    这样做对吗?

    0 回复  |  直到 7 年前