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)也是可能的。