에러 종류
AssertionError : thread already started
의문점
분명 스레드 목록에서 해당 스레드가 사라져 있는데
Thread 객체를 살펴보니
_Thread__started 는 true로 되어있음
_Thread__stopped 역시 true(이쪽은 스레드가 종료되었으니 당연히 맞는 말이겠고)
그래서 다시 Thread.start(self)를 호출하니 스레드가 이미 시작되었다는 에러가
흠.. 그렇다고 Thread.__init__(self)를 다시 호출하고 start를 호출하면
이번엔 Thread not found 에러가 발생
아, started는 과거형이라서 한번 start를 호출하면 그대로 true로 되어 있는건가
으음.....
@결과
기존에는 스레드를 사용하는 클래스
들이 Thread를 상속받아서 스레드를 동작시키고 있었음.
위의 방법에서 아래의 방식으로 변경.
아래의 코드로 변경하니 제대로 스레드를 다시 시작시킴
음... 아직 안되는 정확한 이유는 모르겠는데
Thread를 상속받아서 사용하는건 아마 그 상속 때문에 Thread.__init__(self)이 제대로 수행되지 않은듯하다
디버깅하면서 봤을때는 다시 init되는것처럼 보였으나, 스레드 이름만 변경되고
Thread.__started, Thread.__stopped는 false가 아닌 true 그대로 유지되고 있었다
두번째 방법으로 멤버변수를 만들어 덮어 씌우는 형식으로 변경하니 Thread가 제대로 다시 생성되었음
AssertionError : thread already started
의문점
분명 스레드 목록에서 해당 스레드가 사라져 있는데
Thread 객체를 살펴보니
_Thread__started 는 true로 되어있음
_Thread__stopped 역시 true(이쪽은 스레드가 종료되었으니 당연히 맞는 말이겠고)
그래서 다시 Thread.start(self)를 호출하니 스레드가 이미 시작되었다는 에러가
흠.. 그렇다고 Thread.__init__(self)를 다시 호출하고 start를 호출하면
이번엔 Thread not found 에러가 발생
아, started는 과거형이라서 한번 start를 호출하면 그대로 true로 되어 있는건가
으음.....
@결과
기존에는 스레드를 사용하는 클래스
들이 Thread를 상속받아서 스레드를 동작시키고 있었음.
class Class1 (Thread) :
def Restart (self) :
def __init__ (self) :
Thread.__init__(self)
Thread.start()
Thread.start()
def Restart (self) :
Thread.join()
Thread.__init__(self)
Thread.start()
Thread.__init__(self)
Thread.start()
위의 방법에서 아래의 방식으로 변경.
class Class1 :
def __init__ (self) :
self.m_thread = threading.Thread(target=self.run)
self.m_thread.start()
self.m_thread.start()
def Restart (self) :
self.m_thread.join()
self.m_thread = threading.Thread(target=self.run)
self.m_thread.start()
self.m_thread = threading.Thread(target=self.run)
self.m_thread.start()
아래의 코드로 변경하니 제대로 스레드를 다시 시작시킴
음... 아직 안되는 정확한 이유는 모르겠는데
Thread를 상속받아서 사용하는건 아마 그 상속 때문에 Thread.__init__(self)이 제대로 수행되지 않은듯하다
디버깅하면서 봤을때는 다시 init되는것처럼 보였으나, 스레드 이름만 변경되고
Thread.__started, Thread.__stopped는 false가 아닌 true 그대로 유지되고 있었다
두번째 방법으로 멤버변수를 만들어 덮어 씌우는 형식으로 변경하니 Thread가 제대로 다시 생성되었음