我试图从几个例子中激励我,但对不起,线程对我来说还不清楚......: - (
我有一个启动龙卷风服务器的类,启动应该发生在一个线程中,所以我的应用程序可以做其他事情(webserver只在那里通过rest api进行控制)。
#!/usr/bin/env python
import tornado.ioloop
import tornado.web
from threading import Thread
class rest(tornado.web.Application) :
def __init__(self):
print("initialize tornado app")
handlers = [
(r"/getTemperature", getTemperature)
]
super(rest,self).__init__(handlers)
def start(self):
print("start webserver")
self.listen(8888)
serverT=Thread(target=tornado.ioloop.IOLoop.instance().start())
serverT.daemon=True
serverT.start()
def stop(self):
self.cancelled=True
tornado.ioloop.IOLoop.instance().stop()
class getTemperature(tornado.web.RequestHandler):
def get(self):
print("getTemperature handler")
self.post()
"""Nothing to do, data are only posted"""
def post(self):
"""Return the list of all sensors with temp"""
self.write("this is a test from the request handler")
我这样叫这个班:
myRest=rest().start()
print "test"
但是代码只执行web服务器,并且不执行其余的:print ... 我做错了什么(再次;-)?
答案 0 :(得分:1)
问题在于这一行:serverT=Thread(target=tornado.ioloop.IOLoop.instance().start())
。你在这里调用start方法,但是你需要将start方法本身作为线程的目标传递,以便线程可以调用它。只需删除该行上的最后一组parens:serverT=Thread(target=tornado.ioloop.IOLoop.instance().start)