2009-02-09 2 views
0

내 애플 리케이션 파이썬에서 루프 싶지만 종료하는 방법이 필요합니다. 콘솔에서 입력을 얻고 q 글자를 스캔하고 내 앱이 종료 될 준비가되었을 때 빠른 방법이 있습니까? C에서 나는 단지 cin, 스캔, 글로벌 종료 var, 변경, 잠그기 및 스레드를 종료 할 때까지 기다리는 pthread를 만들 것입니다. 내 애플 리케이션이 파일 또는 파일을 덤핑 ​​할 때 종료하는 것을 허용합니다. 파이썬에서이 작업을 동일한 방식으로 수행하고 크로스 플랫폼이 될 것인가? (나는 창 특정 파이썬에서 글로벌 단일 인스턴스를 참조하십시오)python console intrupt? 그리고 크로스 플랫폼 스레드

답변

1

스레드 클래스를 만들기 위해 스레드 모듈을 사용하십시오.

import threading; 

class foo(threading.Thread): 
    def __init__(self): 
     #initialize anything 
    def run(self): 
     while True: 
      str = raw_input("input something"); 

class bar: 
    def __init__(self) 
     self.thread = foo(); #initialize the thread (foo) class and store 
     self.thread.start(); #this command will start the loop in the new thread (the run method) 
     if(quit): 
      #quit 
1

새 스레드 만들기가 쉽습니다. 스레딩 모듈이 도움이됩니다. 데몬틱하게 만들 수 있습니다 (프로그램을 종료하는 다른 방법이있는 경우). I 도 잠금없이 변수를 변경할 수 있다고 생각합니다. - 파이썬은 자체 스레드를 구현하며, 나는 self.running = False과 같은 것이 원자적일 것입니다.

새 스레드를 킥오프하는 가장 간단한 방법은 threading.Thread(target=) 함께 :

# inside your class definition 
def signal_done(self): 
    self.done = True 

def watcher(self): 
    while True: 
     if q_typed_in_console(): 
      self.signal_done() 
      return 

def start_watcher(self): 
    t = threading.Thread(target=self.watcher) 
    t.setDaemon(True) # Optional; means thread will exit when main thread does 
    t.start() 

def main(self): 
    while not self.done: 
     # etc. 

당신이, 당신의 스레드가 똑똑 할 당신이 자신을 threading.Thread을 하위 클래스 등, 자신의 상태에있는 경우. 문서에는 더 많은 것이 있습니다.

[관련 : 파이썬 스레드가 여러 개인 경우에도 파이썬 실행 파일 자체는 단일 스레드입니다.]