2010-06-21 4 views
2

파이썬 프로그램에서 일부 스레드를 시작해야합니다. 쓰레드는 백그라운드 태스크를 수행하는데 오랜 시간이 걸릴 수 있으므로 태스크가 발생하기를 기다리는 메인 쓰레드를 차단하고 싶지는 않습니다.명시 적으로 파이썬 스레드를 결합 하시겠습니까?

파이썬은 Thread.join()과 Thread.isAlive()를 사용하여 스레드를 'reap'할 수있는 기능을 제공합니다. 그러나 스레드가 끝난 시점을 알아내는 것은 실제로 신경 쓰지 않습니다. 나는 실을 시작하는 것이 만족스럽고, 그것은 결코 그것을 다시는 걱정하지 않는다.

질문은 나중에 시작할 수 있도록 Thread 개체에 대한 참조를 유지해야합니까? 또는 Thread 객체에 대한 참조가 범위를 벗어나고 걱정하지 않도록 할 수 있습니까? 이 경우에는 '옳은'일이 있습니까?

답변

1

명시 적으로 join 실 필요가 없습니다 - 단지 그들이 "daemonized"아니에요 확인은 (기본에 False을 자신의 daemon 속성을 떠나) 그래서 그들은 모두 완료 될 때까지 그들은 살아 과정을하겠습니다 (만약 당신이 쓰레드 데몬을 만든다면, 모든 관련 쓰레드가 끝날 때까지 주 쓰레드가 종료되지 않도록해야한다. 그렇지 않으면 쓰레드는 OS에 의해 죽게 될 것이다.)

옳은 일은 가장 단순한 것 같아요. "백그라운드 스레드"에 대해 잊어 버리고 그냥 비 데몬으로 만드십시오. (모든 기본 상태가 끝난 것입니다).

+0

하지만 스레드는 (_daemonization_과 상관없이)'join() '하지 않으면 _zombie_와 같은 상태를 유지합니까? – C2H5OH

관련 문제