2017-03-01 1 views
0

다른 스레드에서 실행중인 worker 객체에서 stopThread을 호출하여 실행중인 스레드를 Python에서 부드럽게 종료하려고합니다.스레드에서 실행중인 객체에서 함수를 호출 할 수 없습니다.

그러나 그렇게 나에게 오류주고있다 :

AttributeError: 'Thread' object has no attribute 'stopThread' 

우리가 어떻게이 문제를 해결할 수

를?

AttributeError: 'Thread' object has no attribute 'stopThread' 
       ^^^^^^^^^^^^^^ 

가 의도로 Worker 객체

t = threading.Thread(target=startWorker) 

때문에 .. 그리고하지 :

import threading 
import time 

class Worker(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.stopRequest = threading.Event() 

    def doSomething(self): 
     while True: 
      if not self.stopRequest.isSet(): 
       print 'Doing something' 
       time.sleep(5) 

    def stopThread(self): 
     self.stopRequest.set() 


def startWorker(): 
    worker = Worker() 
    worker.doSomething() 


# Start thread 
t = threading.Thread(target=startWorker) 
t.start() 

# Stop thread 
t.stopThread() 
+0

유용한 스레드 종료 토론 : http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python – DyZ

+0

당신은' 당신이 생각하기에 아마도 당신이 생각하는 것처럼 '노동자'하위 클래스. 예제는 [** _ 스레드 시작 및 중지 방법 _ **] (http://stackoverflow.com/questions/15729498/how-to-start-and-stop-thread)를 참조하십시오. – martineau

답변

0

당신은 오류가 있습니다.

5 월 말 : t = Worker(target=startWorker)? 물론 키워드 매개 변수를 추가 매개 변수로 사용하여 수퍼 클래스 Thread으로 보내야합니다. 대신 외부 t.stopThread()startWorker()worker.stopThread() :


또는, 당신은 당신이 말하고자 했습니까?

+0

내가 뭘 하려는지 더 잘 반영하도록 질문의 코드를 업데이트했습니다. 파이썬에서 쓰레딩을 처음 접했습니다. 기본적으로 모든 코드가 다른 스레드에서 실행되는'Worker' 객체를 생성하려고 할 때'doSomething' 메소드를 실행 한 다음 스레드를 종료합니다. – Nyxynyx

+0

내 코드가 새로운 스레드에서 실행되는 'startWorker' 함수를 얻으려고했습니다. – Nyxynyx

+0

코드를 읽었습니다. 당신은 실제로 다양한 것을 혼란스럽게합니다. 1)'Worker' 클래스는 스레드처럼 행동해야합니까? 아니면 뭔가 스레드가 아닌 것처럼하고 어떤 일을하기로되어 있습니까? 후자 인 경우,'Thread'에서'Worker' 클래스를 상속하는 것은 말이되지 않습니다. 그것이 이전 일 경우, 제 대답의 첫 부분에서와 같이't = Worker (..) '라고 말해야합니다. 2) 당신은'threading.Event'를 설정하고 있지만 결코 사용하지 않습니다. 이 객체를 검사하는 루프 또는 무언가가 있어야합니다. 이것은 내가 Worker를 스레드처럼 만들 생각이라고 생각합니다. 이 답변을보십시오 : http://stackoverflow.com/a/27261365/227884 – SuperSaiyan

관련 문제