2013-03-01 5 views
0

저는 BaseManager를 사용하여 큐를 작업자 프로세스 풀과 공유합니다. 다른 스레드에서 관리자를 실행시키기 위해 start()를 호출합니다.멀티 프로세싱 BaseManager shutdown() 이십 초 걸립니다

shutdown()에서 "이 문서는 서버 프로세스를 시작하는 데 start()가 사용 된 경우에만 사용할 수 있습니다."라는 메시지가 표시됩니다. 그러나 shutdown()을 호출하면 매번 종료되기 전에 전경 프로세스가 관리자 프로세스에서 20 초 동안 차단됩니다. shutdown()을 호출하지 않으면 전경 프로세스가 즉시 종료됩니까?

무엇이 누락 되었습니까?

또한 문서에 "여러 번 호출 될 수 있습니다."라는 이유가있는 사용자는 누구입니까? 관리자 프로세스에 여러 개의 종료 신호를 보내는 이유는 무엇입니까?

답변

1

의도적으로 20 초 동안 대기합니다. 자세한 내용은 refer here을 참조하십시오.

 process.join(timeout=0.2) 
     if process.is_alive(): 
      util.info('manager still alive') 
      if hasattr(process, 'terminate'): 
       util.info('trying to `terminate()` manager process') 
       process.terminate() 
       process.join(timeout=0.1) 
       if process.is_alive(): 
        util.info('manager still alive after terminate') 
+0

종료 호출이나 지연을 나타내는 프로세스가 생성되지 않습니다. 그게 디자인이라고 생각하니? shutdown()을 호출하지 않으면 어떤 프로세스도 열려 있지 않은 것처럼 보입니다. 나는 심지어 전화하는 것의 의미에 대해서 질문한다. –

+1

셧다운은'util._run_finalizers (0)'을 호출하여 시작 프로세스를 위해 선언 된 파이널 라이저를 실행합니다. 이제 당신이 시작의 정의를 참조한다면, finalize의 등록이 있다는 것을 알게 될 것입니다. 이것은 _finalize_manager를 호출하는데, terminate()에 의지하기 전에 관리자가 완전히 종료되기를 기다릴 때 사용되는 timeout 매개 변수가 있습니다. –

+0

Great. 해명 해 줘서 고마워, 트래비스. –