一:tornado内置服务器
内置服务器在编程操作过程中,通过listen()监听一个端口,然后通过IOLoop对象进行了事件轮询监听处理
二:分析内置服务器底层操作代码(查看底层代码)
定义一个web application为app
app.listen(8000)#底层操作的方式:主要封装了将项目部署到服务器的操作
server = HTTPServer(app)#部署项目app到服务器
server.listen(8000)#监听8000端口--单进程的的实现模式
server =HTTPServer(app)#部署项目,跟单进程没有关系
server.bind(8000)#绑定8000端口
server.start()#创建多进程的核心操作步骤
- 拓展:
查看底层操作代码可知(了解,不推荐使用)server.start(none/0):表示根据当前运行的硬件主机CPU的核心数量创建对应的多个进程
server.start(1/):默认值,表示当前进程中直接运行服务器,默认为单进程
server.start(>1):按照指定的数量创建多个进程
- 推荐:
tornado默认单进程单线程的运行模式,当然也推荐多进程运行
通过手工控制多进程运行,不同的进程之间相互独立!
- 手工多进程操作方式
通过define()定义端口sport作为一个变量
eg:define(‘port’,default=8000)#定义变量名字为port 默认端口为8000
通过parse_command_line()将这个变量作为命令行可以接受的参数选项
- 接受命令行指定的参数
程序运行时可以接受命令行参数数值,就可以在运行一个程序是,指定其使用参数中包含的数据值--端口
eg:
python demo01.py --port==8000
python demo01.py --port==8000
三:小结
- 话不多说,直接来干货——一个应用程序代码
from tornado.web import RequestHandler, Application
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_command_line
from tornado.httpserver import HTTPServer
#定义变量
define('port', default=8088, help='this is well fly')
#定义视图类
class IndexHandler(RequestHandler):
#重写get方法
def get(self, *args, **kwargs):
self.write('i am tornado')
#程序入口
if __name__ == '__main__':
#开始接受监听命令行参数数据,命令行参数数据必须通过define指定
parse_command_line()
#构建web Application
app = Application([(r'/', IndexHandler),
])
#项目部署到server
server = HTTPServer(app)
server.bind(options.port)
server.start()
#启动轮询监听
IOLoop.current().start()