2015-02-05 4 views
9

SimpleHTTPServer을 별도의 스레드로 시작하고 주 스레드에서 다른 작업 (여기서는 time.sleep(100))을 실행하고 싶습니다.SimpleHTTPServer가 스레드로 실행 됨 : 데몬을 생성하지 않음

from SimpleHTTPServer import SimpleHTTPRequestHandler 
from BaseHTTPServer import HTTPServer 

server = HTTPServer(('', 8080), SimpleHTTPRequestHandler) 
print 'OK UNTIL NOW' 
thread = threading.Thread(target = server.serve_forever()) 
print 'STUCK HERE' 
thread.setdaemon = True 
try: 
    thread.start() 
except KeyboardInterrupt: 
    server.shutdown() 
    sys.exit(0) 

print 'OK' 

time.sleep(120) 

그러나, 스레드, 즉 "차단"남아있는 데몬으로 시작되지 않고 인터프리터가 print 'OK'에 도달하지 않습니다 여기 내 코드의 간단한 샘플입니다. 그것은 STUCK HERE에 도달하지 않습니다.

threading.Thread(...)을 호출 할 때 스레드가 초기화되고 주 스레드가 thread.start 명령을 실행할 때까지 계속 진행할 것입니다.

이 작업을 수행하는 더 좋은 방법이 있습니까?

+1

:

thread.setdaemon = True 

이 되려면 thread = threading.Thread (target = server.serve_forever) – vijay

답변

9

변경이 :

thread = threading.Thread(target = server.serve_forever()) 

이 될하려면

thread = threading.Thread(target = server.serve_forever) 

그리고 변경이 :

thread.daemon = True 
3

시도 thread = threading.Thread(target = server.serve_forever), 즉 전화하지 않고.

버전에 문제가있는 것은 thread가 작성된 행을 구문 분석 할 때 serve_forever()가 호출된다는 것입니다. 그러므로, 당신은 결코 다음 라인에 도달하지 못합니다.

인수 유형은 호출 가능해야하며 스레드 시작시 호출되어야합니다. 이 함수를 실행 한 결과를 전달하는 대신 server.serve_forever을 전달해야합니다.