一: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()