2015-02-05 102 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(...)時纔會初始化線程,並且主線程仍然會繼續,直到找到指令啓動它爲止。

有沒有什麼更好的方法來完成這項任務?

+1

thread = threading.Thread(target = server.serve_forever) – vijay 2015-02-06 11:42:34

回答

9

更改此:

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

是這樣的:

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

並改變這一點:

thread.setdaemon = True 

是這樣的:

thread.daemon = True 
3

嘗試thread = threading.Thread(target = server.serve_forever),即沒有電話。

與您的版本的問題是,serve_forever()調用解析在其中創建線程行。因此,你永遠不會到達下一行。

參數類型必須是可調用的,它將在線程啓動時調用,所以 您需要傳遞名稱server.serve_forever而不是試圖傳遞執行此函數的結果。