tornado中的options常用姿势

tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和从配置文件中解析参数。使用步骤如下:

  1. 源码中的示例代码,定义全局变量:
from tornado.options import define, options
define("mysql_host", default="127.0.0.1:3306", help="Main user DB")
define("memcache_hosts", default="127.0.0.1:11011", multiple=True,
       help="Main user memcache servers")
def connect():
    db = database.Connection(options.mysql_host)
    ...

 
  1. 在模块的main函数中解析命令行参数或者配置文件
Your ``main()`` method can parse the command line or parse a config file with
either::
    tornado.options.parse_command_line()
    # or
    tornado.options.parse_config_file("/etc/server.conf")

命令行参数格式:--myoption=myvalue

配置文件可以是python文件,参数格式为:

myoption = "myvalue"
myotheroption = "myothervalue"
  1. Tornado.options默认是定义为单例模式的,通过tornado.options.options对象来维护全局参数,如果在线程中需要维护自己的变量,也可以使用tornado.options. OptionParser对象来维护参数。tornado.options.options就是通过实例OptionParser的对象来实现的,而且把define、parse_command_line、parse_config_file放到tornado.options 包中,可以直接使用,与调用tornado.options.options的方法是一致的。代码如下:
options = OptionParser()
"""Global options object.
All defined options are available as attributes on this object.
"""
def define(name, default=None, type=None, help=None, metavar=None,
           multiple=False, group=None, callback=None):
    """Defines an option in the global namespace.
    See `OptionParser.define`.
    """
    return options.define(name, default=default, type=type, help=help,
                          metavar=metavar, multiple=multiple, group=group,
                          callback=callback)
def parse_command_line(args=None, final=True):
    """Parses global options from the command line.
    See `OptionParser.parse_command_line`.
    """
    return options.parse_command_line(args, final=final)
def parse_config_file(path, final=True):
    """Parses global options from a config file.
    See `OptionParser.parse_config_file`.
    """
    return options.parse_config_file(path, final=final)

三种配置端口的方式

第一种:在终端输入 端口以及其他配置

# -*- coding: utf-8 -*-


import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options

# tornado.options.define()
# 用来定义options选项变量的方法
tornado.options.define('port', default=8000, type=int)
tornado.options.define('list', default=[],type=str)


#     name  选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write("ojbk")


if __name__ == '__main__':
    # 方式一: 在终端中配置 参数
    tornado.options.parse_command_line()  
    # 从终端中输入   python3 options.py --port=7979 --list=['goods','food']
    print('list:',tornado.options.options.list)
    app = tornado.web.Application([
        (r'/', IndexHandler)
    ])
    
    httpServer = tornado.httpserver.HTTPServer(app)
    httpServer.bind(tornado.options.options.port)
    httpServer.start(1)
    tornado.ioloop.IOLoop.current().start()

 # 从终端中输入   python3 options.py --port=7979 --list=['goods','food'] 

第二种:在配置文件中导入 端口以及其他配置

config文件:	
port = 7000
list = ['good','nice']
# -*- coding: utf-8 -*-

# tornado 为我们提供了一个便捷的 tornado.options 模块

# 作用:
# 1.全局参数的定义,存储,转换


import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options

# tornado.options.define()
# 用来定义options选项变量的方法
tornado.options.define('port', default=8000, type=int)
tornado.options.define('list', default=[])


#     name  选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write("ojbk")


if __name__ == '__main__':
    # 方式二: 从 配置文件中获取配置参数
    tornado.options.parse_config_file("config")  # 从配置文件加载配置
    print('list:',tornado.options.options.list)
    app = tornado.web.Application([
        (r'/', IndexHandler)
    ])
    
    httpServer = tornado.httpserver.HTTPServer(app)
    httpServer.bind(tornado.options.options.port)
    httpServer.start(1)
    tornado.ioloop.IOLoop.current().start()

第三种:包的导入(常用)

# config.py

options = {
    'port': 8910,
    'list': ['fgooo', 'sdf']
}
# -*- coding: utf-8 -*-


import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
import config


#     name  选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
class IndexHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write("ojbk")


if __name__ == '__main__':
    # 方式二: 在py文件中导入 参数
    print('list:',config.options.get('list'))
    app = tornado.web.Application([
        (r'/', IndexHandler)
    ])
    
    httpServer = tornado.httpserver.HTTPServer(app)
    httpServer.bind(config.options.get('port'))
    httpServer.start(1)
    tornado.ioloop.IOLoop.current().start()


原文地址:https://www.cnblogs.com/qianzhengkai/p/11341190.html