2012-08-13 2 views
2

파이썬에서 스레딩을 배우기위한 스크립트를 만들려고하고 있는데 스레드에서 for 루프를 막을 수 없습니다. 현재, pyInstaller를 사용하여 스크립트를 컴파일하고 있고, 알고있는 Thread 프로세스를 끝내는 것이 최선의 방법이 아니라면, 누군가 내가 명령에 대한 스레드를 종료하는 방법을 설명 할 수 있습니까? 나는 다른 많은 질문을 읽었지 만, 스레드를 '올바른'방법으로 멈추는 방법을 이해할 수없는 것 같습니다. 기능은 지금은 괜찮은 Tkinter에서 만든 GUI에 의해 호출파이썬에서 스레드의 for 루프를 멈추는 방법?

class Thread(Thread): 
     def __init__(self, command, call_back): 
     self._command = command 
     self._call_back = call_back 
     super(Thread, self).__init__() 

    def run(self): 
     self._command() 
     self._call_back() 
def test(): 
    i = 20 
    for n in range(0,i): 
     #This is to keep the output at a constant speed 
     sleep(.5) 
     print n 
def thread_stop(): 
    procs = str(os.getpid()) 
    PROCNAME = 'spam.exe' 
    for proc in psutil.process_iter(): 
     if proc.name == PROCNAME: 
      text = str(proc)[19:] 
      head, sep, tail = text.partition(',') 
      if str(head) != procs: 
       subprocess.call(['taskkill', '/PID', str(head), '/F']) 

: 여기를 테스트하기 위해 현재로서는 사용하고있는 코드입니다.

모든 것을 읽지 않으려면 다음과 같이하십시오. Python 스레드에서 for 루프가있을 때 '올바른 방법'스레드를 중지하려면 어떻게합니까? 감사!

편집 : 미안하지만, 내가 가장 중요하다고 생각한 코드를 가져 왔습니다. 대신, 여기 전체 코드가 있습니다 (파이썬을 배우기 위해 사용하는 텍스트 메신저입니다. 그러나 위의 코드는 쓰레드를 풀기 전에 먼저 쓰는 것입니다). http://pastebin.com/qaPux1yR

+0

아무것도 실제로 테스트'를 호출하지 않습니다()'. 관련 코드를 모두 알려주십시오. – Amber

+0

@Amber 죄송합니다. 게시물을 편집했습니다. –

+0

당신은 스레드를 죽이려고합니까? 루프 종료 신호를 보낼 수 없습니까? –

답변

6

절대 스레드를 강제 종료해서는 안됩니다. 대신 일정한 간격으로 스레드가 검사하는 일종의 "신호"를 사용하십시오. 설정된 경우 스레드는 훌륭하게 완료됩니다.

"신호"의 가장 간단한 종류의 간단한 부울 변수이며,이 같은 것을 사용할 수 있습니다 : 여기

class MyThread(Thread): 
    def __init__(self): 
     self.continue = True 

    def run(self): 
     while (self.continue): 
      # Do usefull stuff here 
      pass 

    def stop(self): 
     self.continue = False 
+0

run()에서 코드를 이동하고 for 루프를 잠시 동안 변경하겠습니까? 수업은 나에게 매우 혼란 스럽습니다. 자신과 init에 대한 기본적인 설명도 도움이 될 것입니다. 감사합니다. –

+0

@ Some programmer dude는 "서브 클래스의 생성자 메소드를 재정의"하는 3 행에서 무엇을하고 있습니까? – neoDev

관련 문제