线程阻止进一步执行

时间:2014-04-19 12:12:15

标签: python multithreading tornado

我试图从几个例子中激励我,但对不起,线程对我来说还不清楚......: - (

我有一个启动龙卷风服务器的类,启动应该发生在一个线程中,所以我的应用程序可以做其他事情(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 ... 我做错了什么(再次;-)?

1 个答案:

答案 0 :(得分:1)

问题在于这一行:serverT=Thread(target=tornado.ioloop.IOLoop.instance().start())。你在这里调用start方法,但是你需要将start方法本身作为线程的目标传递,以便线程可以调用它。只需删除该行上的最后一组parens:serverT=Thread(target=tornado.ioloop.IOLoop.instance().start)