单独把flask和tornado运用起来的例子非常多,可以网上搜索下有很多,这里就不赘述了。
我想了一种方案就是把flask和tornado同时集成在一个工程中,在同一个进程中跑起来。
我的方案是flask按正常的流程运行起来。
flask 在主线程中这样跑:
from app import app
app.debug = True
app.run(host='0.0.0.0',port=5000) #这样用来监听所有的ip,团队调试用
tornado用一个线程封装后运行:
class WSServer(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.wsapp = tornado.web.Application( handlers=[ (r"/", IndexHandler) ] ) def run(self):self.wsapp.listen(6000) tornado.ioloop.IOLoop.instance().start()
-------------------------------------------------------------------------------------------------------------------
这样运行后发现fork了两个进程出来,一个是flask的5000,另一个是tornado的6000
我感到非常的疑惑,后来找了很久最终找到了原因。
原因是DEBUG模式下flask开多一个线程来监视项目的变化。
如果你想要避免加载两次,应该设置app.run(debug=True, use_reloader=False)