Tornado.options源码解读

来源:互联网 发布:网盘管理系统 源码 编辑:程序博客网 时间:2024/06/16 23:55

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)
    ...

 

2.  在模块的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"

 

3.  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)

 

 

0 0
原创粉丝点击