Python SimpleHTTPServer作为线程启动:不进行后台监控

Python SimpleHTTPServer作为线程启动:不进行后台监控,python,httpserver,Python,Httpserver,我想在单独的线程中启动一个SimpleHTTPServer,同时在主线程中执行其他操作(这里是time.sleep(100))。以下是我的代码的简化示例: from SimpleHTTPServer import SimpleHTTPRequestHandler from BaseHTTPServer import HTTPServer server = HTTPServer(('', 8080), SimpleHTTPRequestHandler) print 'OK UNTIL NOW'

我想在单独的线程中启动一个
SimpleHTTPServer
,同时在主线程中执行其他操作(这里是
time.sleep(100)
)。以下是我的代码的简化示例:

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)
但是,线程仍处于“阻塞”状态,即未作为守护进程启动,并且解释器未到达
打印“OK”
。它既没有到达卡在这里的

我认为线程只有在调用
threading.thread(…)
时才会初始化,并且主线程仍会继续运行,直到找到
thread.start
指令启动它


有没有更好的方法来完成这项任务?

试试
thread=threading.thread(target=server.serve\u forever)
,即不用调用

您的版本存在的问题是,在解析创建线程的行时调用serve_forever()。因此,您永远无法到达下一行

参数类型必须是可调用的,它将在线程启动时调用,因此 您需要传递名称,
server.serveforever
,而不是试图传递执行此函数的结果。

更改此项:

thread = threading.Thread(target = server.serve_forever())
thread.setdaemon = True
为此:

thread = threading.Thread(target = server.serve_forever)
thread.daemon = True
改变这一点:

thread = threading.Thread(target = server.serve_forever())
thread.setdaemon = True
为此:

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

thread=threading.thread(target=server.serveforever)我打赌这是一个打字错误。setDaemon(True)也是可能的。