<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                一:tornado基礎程序 (1):tornado第一個基礎程序 ~~~ import tornado.ioloop tornado的核心iO循環模塊,封裝了linux的epoll和BSD的kqueue import tornado.web tornado的web基礎框架模塊 ~~~ ~~~ 視圖業務處理類 class MainHandler(tornado.web.RequestHandler): //處理get請求的,不能處理post請求 def get(self): //對應http請求的方法 //給瀏覽器響應信息 self.write("Hello, world") ~~~ ~~~ 路由 def make_app(): //Application是tornado 的web框架的核心應用類,與服務器對應的接口 return tornado.web.Application([ //保存了路由映射表 (r"/", MainHandler), ]) ~~~ ~~~ if __name__ == "__main__": app = make_app()//實例化一個app對象 app.listen(80)//創建了一個http服務器,并綁定了端口 //IOLoop.current():返回當前線程的IOLoop實例 //IOLoop.start():啟動IOLoop實例的I/O循環,同時開啟了監聽 tornado.ioloop.IOLoop.current().start() ~~~ (2):tornado高性能原理圖 ![](https://img.kancloud.cn/98/5d/985dda937eea6c615b97a188422c5b9a_821x584.png) 二:httpserver (1):httpserver對象 ``` app.listen(80)替換為: import tornado.httpsever//需要引入httpserver模塊 //實例化一個http服務器對象 httpServer=tornado.httpserver.HTTPServer(app) httpServer.listen(80)//綁定端口,此處listen()與app.listen()不是同一個方法 ``` (2)單進程與多進程 1.默認是單進程 2.代碼實例 ``` import tornado.httpsever httpServer=tornado.httpserver.HTTPServer(app) httpServer.bind(80) httpServer.start(5) ``` 3.說明 httpServer.bind(80):將服務器綁定到指定的端口 httpServer.start(5):默認開啟一個進程;值小于等于0或為None,開啟對應服務器cpu核心數個子進程;值大于0則創建對應值個子進程 4.補充說明 app.listen(80)只能在單進程模式中使用 不建議使用上面的方法啟動多進程,采用手動啟動的方式,即python index.py 原因: 1.每個子進程都會從父進程中復制一份IOLoop的實例,如果在創建子進程前修改了IOLoop,會影響所有的子進程 2.所有的進程都是由一個命令啟動的,無法做到在不停止服務的情況下修改代碼 3.所有的進程共享一個端口,想分別監控很困難 三:options----需要引入options模塊---import tornado.options (1):tronado為我們提供了一個tornado.options模塊,可以進行全局參數的定義,存儲,轉換 (2)基礎方法與屬性 1.tornado.options.difine() ``` 原型: tornado.options.define(name='',default=None,type=None,help=None,metavar=None,multiple=False,group=None,callback=None) 功能:用來定義options選項變量的方法 參數: #name:選項變量名,必須保證其唯一性,否則會報‘option xxx alerady define in ...’ #default:設置選項變量的默認值,默認None #type: 1.設置選項變量的類型,從命令行或配置文件導入參數時會根據類型轉換輸入的值,轉換不成會報錯,可以是str,int,float... 2.如果沒有設置type,會根據default的值進行轉換 3.如果default沒有設置,那么不進行轉換 #multiple:設置選項變量是否可以多個值,默認False #help;選項變量的幫助提示信息 事例: tornado.options.define('port',default=80,type=int) tornado.options.define('list',default=[],type=str) ``` 2.tornado.options.options --全局的options對象,所有定義的選項變量都會作為該對象的屬性 ``` 示例:print(tornado.option.options.port) 結果為80(上面的端口號) 獲取參數的方法: tornado.options.parse_command_line()轉換命令行參數 例如Python index.py --port=80 --list=goods,picture,image 代碼示例: ~~~ import tornado.ioloop import tornado.web import tornado.httpsever import tornado.options tornado.options.define('port',default=80,type=int) tornado.options.define('list',default=[],type=str) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") tornado.options.parse_command_line() print("list=",tornado.options.options.list) def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() httpServer=tornado.httpserver.HTTPServer(app) httpServer.bind(tornado.options.options.port) httpServer.start() tornado.ioloop.IOLoop.current().start() ~~~ ``` ![](https://img.kancloud.cn/07/86/07862a07ad45ca1e3fb9c6ed30b0d0fe_549x74.png) ![](https://img.kancloud.cn/60/01/6001f8c0390e4ffe04c6cce4f9ceaed5_374x116.png) 3.tornado.options.parse_config_file(path) --從配置文件導入參數,創建的是普通文件 代碼示例 ![](https://img.kancloud.cn/aa/d8/aad8a8c2ca76f541028db30eaaf89575_718x287.png) ![](https://img.kancloud.cn/7d/bd/7dbdc2fc1a9a17e496f3552d942d944b_488x456.png) 說明: 書寫格式仍需按照python的語法要求,不支持字典類型 4.最終版本 --創建一個名為config.py的文件 代碼示例: ![](https://img.kancloud.cn/de/d8/ded84ff32721b585e17a8ac881e6aa82_672x320.png) ![](https://img.kancloud.cn/7f/63/7f63c8a2dcd319459a1bc7e826ac707a_414x443.png) 5:日志 當我們在代碼中使用parse_command_line()或者parse_config_file(path)方法時,tornado會默認開啟logging模塊功能,向屏幕終端輸入一些打印信息 ~~~ 關閉日志--需要import tornado.options if __name__ == "__main__": tornado.options.options.logging=None//一定要顯示在第一行,if下面 ~~~ ![](https://img.kancloud.cn/68/26/682638c3ca240094dcbf5efef9dbf18c_347x70.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看