服務的啓動

Import tornado.web  # tornado的基礎web框架模塊web

Import tornado.ioloop  # tornado的核心IO模塊, 封裝了Linuxepoll模塊服務器

 

一. Tornado服務的啓動要素:app

 1. 核心代碼以下:框架

Tornado.web.Application().listen(端口, ip)  # 配置tornado參數, listen()用來設置http請求相關,服務沒有啓動tornado

Tornado.ioloop.IOLoop.instance().start()    # 開始事件循環, 啓服務oop

一般在Tornado.web.Application()對象實例化時, Application類傳入路由映射表及setings配置信息.spa

解析ApplicationTornado.web框架的核心應用類, 是與服務器對應的接口.3d

       

 

   2. 手動建立http服務器server

  上面在實例化Application類後直接調用的listen()方法來設置的http請求服務器, 咱們沒法進行些個性化配置對象

  手動建立http服務器可實現, 以下:

 

     Import tornado.httpserver   # 引入內置模塊,來改寫下啓服務以前的代碼:

       obj = tornado.web.Application([(路由映射關係), ...])

         httpserver = tornado.httpserver.HTTPServer( obj )   # 這兩行和起來的做用至關於上面的一個listen()方法

         Httpserver.listen(8000)

   此處的listen()方法和1中的listen不是同一個, 注意區分

 

  3. Tornado的單進程與多進程:

以上啓動的服務都是單進程下運行的, 如何啓動多進程?

obj = tornado.web.Application([(路由映射關係), ...])

httpserver = tornado.httpserver.HTTPServer( obj )  # httpserveApplication關聯, 以便能讀到配置的路由

httpserver.bind(8000)  # 此處不用listen方法了,注意

Httpserver.start(5)  # 開啓指定數量進程. 不指定時默認開啓1個進程; 0,負數,None時都開啓cpu核數進程

 

 

注意: 1中截圖內的app.listen()方法只能在但進程模式中使用

     3中啓動多進程的方式有些問題, 不建議使用. 問題有:(1)啓動的5個進程都屬於子進程, 會從父進程

         中各自複製一份IOLoop,如在建立子進程前修改了IOLoop,會影響全部子進程; (2)全部進程都是由

         一個命令啓動的, 沒法作到在不中止服務的狀況下修改代碼. (3)全部進程共享一個端口, 想要分別

         監控很困難.

相關文章
相關標籤/搜索