SimpleHTTPServer launched as a thread: does not daemonize

philippe picture philippe · Feb 5, 2015 · Viewed 9.7k times · Source

I would like to launch a SimpleHTTPServer in a separate thread, while doing something else (here, time.sleep(100)) in the main one. Here is a simplified sample of my code:

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)

However, the thread remains "blocking", i.e. is not launched as a daemon and the interpreter does not reach the print 'OK'. It does not neither reach the STUCK HERE.

I have though that the thread would only be initialized when calling threading.Thread(...) and that the main thread would still go further until it found the thread.start instruction to launch it.

Is there any better way to accomplish this task?

Answer

dopstar picture dopstar · Feb 6, 2015

Change this:

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

To be this:

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

And change this:

thread.setdaemon = True

To be this:

thread.daemon = True