실행자 서비스가 시간 초과되지 않고 계속 실행됩니다.

쿨숨 파텔

다음 코드가 있습니다.

  def getIndustryData(String[] theIndustries) {

            PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter("result.txt")))

            //Listens to Twitter statuses and carries out the following methods on the status
            StatusListener listener = new StatusListener() {
                @Override
                void onStatus(Status status) {

                    printWriter.write(status.getLang() + "|||" + status.getText())
                    printWriter.println()
                }

                @Override
                void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {

                }

                @Override
                void onTrackLimitationNotice(int numberOfLimitedStatuses) {

                }

                @Override
                void onScrubGeo(long userId, long upToStatusId) {

                }

                @Override
                void onStallWarning(StallWarning warning) {

                }

                @Override
                void onException(Exception ex) {

                }
            }

            TwitterStream stream = new TwitterStreamFactory().getInstance()
            stream.addListener(listener)
            FilterQuery fq = new FilterQuery()
            fq.track(theIndustries)
            ExecutorService executor = Executors.newSingleThreadExecutor()

            Future<String> future = executor.submit(new Callable<String>() {
                @Override
                String call() throws Exception {

                    stream.filter(fq)
                    return null
                }
            })

            try {

                future.get(2, TimeUnit.MINUTES)

            } catch (TimeoutException e) {

                stream.removeListener(listener)
                stream.shutdown()
                future.cancel(true)
                executor.shutdownNow()

            }
        }

Twitter API에 접근하기 위해 Twitter4J를 사용하고 있는데, 2 분 동안 파일에 트윗을 쓴 후 중지하고 싶습니다.

stream.filter(fq)메서드는 명시된 2 분 후에도 실행되고 TimeoutException에 도달하지 않습니다. 2 분 후에 예외가 잡힐 것이라고 생각하고 방법을 끝낼 수 있지만 이것은 발생하지 않습니다.

SergGr

TwitterStream이 작동하는 방식과 표준 Java FutureExecutorService작동 방식에 대한 잘못된 정신 모델이 있습니다.

TwitterStream은 귀하가 제공하는 스레드에서 작동하지 않습니다. https://github.com/yusuke/twitter4j/blob/master/twitter4j-stream/src/main/java/twitter4j/TwitterStreamImpl.java#L317https : //TwitterStream .filter 의 소스에서 볼 수 있듯이 내부적으로 새 스레드를 시작합니다 . github.com/yusuke/twitter4j/blob/master/twitter4j-stream/src/main/java/twitter4j/TwitterStreamImpl.java#L516

또한 Future.get시간 초과 방법은 TimeoutException. 작업이 빠르면 값만 반환합니다. 그리고 이것이 바로 당신의 경우입니다! 빠른 stream.filter(fq)새로운 Thread것을 만들고 당신의 미래는 즉시 돌아옵니다 null.

작동하는 가장 간단한 방법 (아마도 최선은 아님)은 다음과 같습니다.

stream.filter(fq)
try
{
    Thread.sleep(2 * 60 * 1000); // just sleep on the caller thread
}
catch (InterruptedException e)
{
    // ignore
}
stream.removeListener(listener)
stream.cleanup()
//stream.shutdown()     //don't think you really need shutdown, cleanup seems to be enough

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 Android 서비스가 계속 실행되지 않습니다.

분류에서Dev

setInterval이 지워지지 않고 함수가 계속 실행됩니다.

분류에서Dev

어댑터의 이벤트가 멈추지 않고 계속 실행됩니다.

분류에서Dev

_oldOnerrorHandler가 정의되지 않았습니다. if 문이 계속 실행됩니다.

분류에서Dev

AlarmManager가 특정 시간에 실행되고 반복됩니다.

분류에서Dev

스프링 배치가 중지되지 않고 내부 작업이 계속 실행됩니다.

분류에서Dev

셀레늄 테스트가 실행되지 않습니다. 테스트의 기본 수준에 관계없이 "프로세스 시간 초과 오류"도 표시됩니다.

분류에서Dev

셀레늄 테스트가 실행되지 않습니다. 테스트의 기본 수준에 관계없이 "프로세스 시간 초과 오류"도 표시됩니다.

분류에서Dev

ExecutorService.awaitTermination (timeout, unit)은 시간 초과 후에도 계속 실행됩니다.

분류에서Dev

PHP가 SQL 쿼리를 실행하지 않고 시간 초과

분류에서Dev

Visual Studio에서 게시 한 후 WPF APP가 실행되지 않지만 관리자로 실행됩니다.

분류에서Dev

프로젝트를 빌드하고 실행할 수 있지만 IDE에 계속 오류가 표시됩니다.

분류에서Dev

다중 스레딩, 스레드는 다른 스레드를 기다리지 않고 계속 실행됩니다.

분류에서Dev

vertx 단위 테스트가 실행되지 않음, 시간 초과 예외

분류에서Dev

다시 시작하지 않고 랩톱을 계속 실행하면 Ubuntu 19.04 Unity가 흐리게 표시됩니다.

분류에서Dev

내 JS가 실행되지 않고 POST 오류가 표시됩니다.

분류에서Dev

시간 초과로 Mocha 테스트 실행이 완료되지 않음

분류에서Dev

실행하려는 Linux 서비스가 종료되지 않고 systemd에서 Restart = no를 사용해도 다시 시작됩니다.

분류에서Dev

HCE 서비스가 실행되고 있지 않습니다.

분류에서Dev

Laravel Queue가 테이블에 삽입되지 않지만 작업은 계속 실행됩니다.

분류에서Dev

화면 세션이 종료되지만 프로세스는 계속 작동하고 실행됩니다.

분류에서Dev

호스트와 시간을 동기화하지 않고 게스트 VM에서 vboxadd-service를 계속 실행 하시겠습니까?

분류에서Dev

대기중인 작업은 Supervisor가 실행되지 않아도 계속 처리됩니다.

분류에서Dev

스레드는 계속 실행되고 명령을 실행합니다.

분류에서Dev

여러 가지 방법을 시도했지만이 값 오류가 WebDriver에서 계속 실행됩니다.

분류에서Dev

서비스를 계속 실행하지 않고 종료시 서비스를 중지하도록 Puppet에 알리려면 어떻게해야합니까?

분류에서Dev

Selenium (Java)-특정 텍스트가 요소에 표시 될 때까지 버튼을 계속 클릭하고 특정 시간을 초과하면 실패합니다.

분류에서Dev

스토리 보드의 UITableViewController가 보이지 않는 동안 계속 실행됩니다.

분류에서Dev

Python에서 계산 한 실행 시간의 결과가 올바르지 않습니다.

Related 관련 기사

  1. 1

    내 Android 서비스가 계속 실행되지 않습니다.

  2. 2

    setInterval이 지워지지 않고 함수가 계속 실행됩니다.

  3. 3

    어댑터의 이벤트가 멈추지 않고 계속 실행됩니다.

  4. 4

    _oldOnerrorHandler가 정의되지 않았습니다. if 문이 계속 실행됩니다.

  5. 5

    AlarmManager가 특정 시간에 실행되고 반복됩니다.

  6. 6

    스프링 배치가 중지되지 않고 내부 작업이 계속 실행됩니다.

  7. 7

    셀레늄 테스트가 실행되지 않습니다. 테스트의 기본 수준에 관계없이 "프로세스 시간 초과 오류"도 표시됩니다.

  8. 8

    셀레늄 테스트가 실행되지 않습니다. 테스트의 기본 수준에 관계없이 "프로세스 시간 초과 오류"도 표시됩니다.

  9. 9

    ExecutorService.awaitTermination (timeout, unit)은 시간 초과 후에도 계속 실행됩니다.

  10. 10

    PHP가 SQL 쿼리를 실행하지 않고 시간 초과

  11. 11

    Visual Studio에서 게시 한 후 WPF APP가 실행되지 않지만 관리자로 실행됩니다.

  12. 12

    프로젝트를 빌드하고 실행할 수 있지만 IDE에 계속 오류가 표시됩니다.

  13. 13

    다중 스레딩, 스레드는 다른 스레드를 기다리지 않고 계속 실행됩니다.

  14. 14

    vertx 단위 테스트가 실행되지 않음, 시간 초과 예외

  15. 15

    다시 시작하지 않고 랩톱을 계속 실행하면 Ubuntu 19.04 Unity가 흐리게 표시됩니다.

  16. 16

    내 JS가 실행되지 않고 POST 오류가 표시됩니다.

  17. 17

    시간 초과로 Mocha 테스트 실행이 완료되지 않음

  18. 18

    실행하려는 Linux 서비스가 종료되지 않고 systemd에서 Restart = no를 사용해도 다시 시작됩니다.

  19. 19

    HCE 서비스가 실행되고 있지 않습니다.

  20. 20

    Laravel Queue가 테이블에 삽입되지 않지만 작업은 계속 실행됩니다.

  21. 21

    화면 세션이 종료되지만 프로세스는 계속 작동하고 실행됩니다.

  22. 22

    호스트와 시간을 동기화하지 않고 게스트 VM에서 vboxadd-service를 계속 실행 하시겠습니까?

  23. 23

    대기중인 작업은 Supervisor가 실행되지 않아도 계속 처리됩니다.

  24. 24

    스레드는 계속 실행되고 명령을 실행합니다.

  25. 25

    여러 가지 방법을 시도했지만이 값 오류가 WebDriver에서 계속 실행됩니다.

  26. 26

    서비스를 계속 실행하지 않고 종료시 서비스를 중지하도록 Puppet에 알리려면 어떻게해야합니까?

  27. 27

    Selenium (Java)-특정 텍스트가 요소에 표시 될 때까지 버튼을 계속 클릭하고 특정 시간을 초과하면 실패합니다.

  28. 28

    스토리 보드의 UITableViewController가 보이지 않는 동안 계속 실행됩니다.

  29. 29

    Python에서 계산 한 실행 시간의 결과가 올바르지 않습니다.

뜨겁다태그

보관