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

  1. 源码中的示例代码,定义全局变量:
  1. from tornado.options import define, options
  2. define("mysql_host", default="127.0.0.1:3306", help="Main user DB")
  3. define("memcache_hosts", default="127.0.0.1:11011", multiple=True,
  4. help="Main user memcache servers")
  5. def connect():
  6. db = database.Connection(options.mysql_host)
  7. ...
  1. 在模块的main函数中解析命令行参数或者配置文件
  1. Your ``main()`` method can parse the command line or parse a config file with
  2. either::
  3. tornado.options.parse_command_line()
  4. # or
  5. tornado.options.parse_config_file("/etc/server.conf")

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

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

  1. myoption = "myvalue"
  2. 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的方法是一致的。代码如下:
  1. options = OptionParser()
  2. """Global options object.
  3. All defined options are available as attributes on this object.
  4. """
  5. def define(name, default=None, type=None, help=None, metavar=None,
  6. multiple=False, group=None, callback=None):
  7. """Defines an option in the global namespace.
  8. See `OptionParser.define`.
  9. """
  10. return options.define(name, default=default, type=type, help=help,
  11. metavar=metavar, multiple=multiple, group=group,
  12. callback=callback)
  13. def parse_command_line(args=None, final=True):
  14. """Parses global options from the command line.
  15. See `OptionParser.parse_command_line`.
  16. """
  17. return options.parse_command_line(args, final=final)
  18. def parse_config_file(path, final=True):
  19. """Parses global options from a config file.
  20. See `OptionParser.parse_config_file`.
  21. """
  22. return options.parse_config_file(path, final=final)

三种配置端口的方式

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

  1. # -*- coding: utf-8 -*-
  2. import tornado.web
  3. import tornado.ioloop
  4. import tornado.httpserver
  5. import tornado.options
  6. # tornado.options.define()
  7. # 用来定义options选项变量的方法
  8. tornado.options.define('port', default=8000, type=int)
  9. tornado.options.define('list', default=[],type=str)
  10. # name 选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
  11. class IndexHandler(tornado.web.RequestHandler):
  12. def get(self, *args, **kwargs):
  13. self.write("ojbk")
  14. if __name__ == '__main__':
  15. # 方式一: 在终端中配置 参数
  16. tornado.options.parse_command_line()
  17. # 从终端中输入 python3 options.py --port=7979 --list=['goods','food']
  18. print('list:',tornado.options.options.list)
  19. app = tornado.web.Application([
  20. (r'/', IndexHandler)
  21. ])
  22. httpServer = tornado.httpserver.HTTPServer(app)
  23. httpServer.bind(tornado.options.options.port)
  24. httpServer.start(1)
  25. tornado.ioloop.IOLoop.current().start()
  26. # 从终端中输入 python3 options.py --port=7979 --list=['goods','food']

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

  1. config文件:
  2. port = 7000
  3. list = ['good','nice']
  1. # -*- coding: utf-8 -*-
  2. # tornado 为我们提供了一个便捷的 tornado.options 模块
  3. # 作用:
  4. # 1.全局参数的定义,存储,转换
  5. import tornado.web
  6. import tornado.ioloop
  7. import tornado.httpserver
  8. import tornado.options
  9. # tornado.options.define()
  10. # 用来定义options选项变量的方法
  11. tornado.options.define('port', default=8000, type=int)
  12. tornado.options.define('list', default=[])
  13. # name 选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
  14. class IndexHandler(tornado.web.RequestHandler):
  15. def get(self, *args, **kwargs):
  16. self.write("ojbk")
  17. if __name__ == '__main__':
  18. # 方式二: 从 配置文件中获取配置参数
  19. tornado.options.parse_config_file("config") # 从配置文件加载配置
  20. print('list:',tornado.options.options.list)
  21. app = tornado.web.Application([
  22. (r'/', IndexHandler)
  23. ])
  24. httpServer = tornado.httpserver.HTTPServer(app)
  25. httpServer.bind(tornado.options.options.port)
  26. httpServer.start(1)
  27. tornado.ioloop.IOLoop.current().start()

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

  1. # config.py
  2. options = {
  3. 'port': 8910,
  4. 'list': ['fgooo', 'sdf']
  5. }
  1. # -*- coding: utf-8 -*-
  2. import tornado.web
  3. import tornado.ioloop
  4. import tornado.httpserver
  5. import tornado.options
  6. import config
  7. # name 选项变量名,必须保证其唯一性,否则会报错 option‘xxx’
  8. class IndexHandler(tornado.web.RequestHandler):
  9. def get(self, *args, **kwargs):
  10. self.write("ojbk")
  11. if __name__ == '__main__':
  12. # 方式二: 在py文件中导入 参数
  13. print('list:',config.options.get('list'))
  14. app = tornado.web.Application([
  15. (r'/', IndexHandler)
  16. ])
  17. httpServer = tornado.httpserver.HTTPServer(app)
  18. httpServer.bind(config.options.get('port'))
  19. httpServer.start(1)
  20. tornado.ioloop.IOLoop.current().start()

tornado中的options常用姿势的更多相关文章

  1. tornado中使用torndb,连接数过高的问题

    问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...

  2. 在tornado中使用celery实现异步任务处理之中的一个

    一.简单介绍 tornado-celery是用于Tornado web框架的非堵塞 celeryclient. 通过tornado-celery能够将耗时任务增加到任务队列中处理, 在celery中创 ...

  3. 深入tornado中的协程

    tornado使用了单进程(当然也可以多进程) + 协程 + I/O多路复用的机制,解决了C10K中因为过多的线程(进程)的上下文切换 而导致的cpu资源的浪费. tornado中的I/O多路复用前面 ...

  4. 基于python3.x,使用Tornado中的torndb模块操作数据库

    目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...

  5. [转帖]「日常小记」linux中强大且常用命令:find、grep

    「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍 ...

  6. tornado接收ajax的post请求报错WARNING:tornado.access:405 OPTIONS /add

    后端报错信息 WARNING:tornado.access:405 OPTIONS /add (::1) 1.00m 前端报错信息 2xhr.js?ec6c:172 OPTIONS http://lo ...

  7. .net core中的那些常用的日志框架(Serilog篇)

    前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...

  8. .net core中的Options重新加载机制

    Options是.net core提出的一种辅助配置机制,即选项. 目前,我们可以使用的Options有五种(源码): IOptionsFactory<>:Options的创建工厂(Sin ...

  9. datatables中的Options总结(3)

    datatables中的Options总结(3) 十.ColReorder colReorder.fixedColumnsLeft 不允许x列重新排序(从左数) colReorder.fixedCol ...

随机推荐

  1. CentOS 7 Apache 绑定域名和网站

    CentOS 7 Apache 绑定域名和网站适用场景一台服务器,运行有多个网站,每个网站都希望用户直接通过二级域名来访问,而不是同一个域名通过子目录来访问 配置过程确定自己的 Apache 服务器的 ...

  2. BouncyCastle配置

    1.BouncyCastle简介 BouncyCastle是一款开源的密码包,其中包含了大量的密码算法,使用BouncyCastle的目的就是为了扩充算法支持 下载地址最新加密组件包 http://w ...

  3. 【微学堂】线上Linux服务器运维安全策略经验分享

      技术转载:https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&sn=6d403ab4 ...

  4. 【bzoj3601】一个人的数论(莫比乌斯反演+拉格朗日插值)

    传送门 题意: 求\[ \sum_{i=1}^{n}i^d[gcd(i,n)=1] \] 思路: 我们对上面的式子进行变换,有: \[ \begin{aligned} &\sum_{i=1}^ ...

  5. Html学习之七(CSS选择器的使用--基础选择器优先级问题)

    二.基础选择器的综合使用 优先级顺序:id选择器>class选择器>元素选择器.也就是说,如果这三种选择器同时为某一个元素设定样式,那么冲突的部分按优先级的顺序依次决定. <!DOC ...

  6. Misc-不简单的压缩包

    题目下载地址 https://ctf.bugku.com/files/e5a937a3985f5264a723bcbd0e062b0f/zip 友情连接同时也是网上看到的第一份关于这题的writeup ...

  7. 好用的代码统计小工具SourceCounter(下载)

    SourceCounter下载链接 https://pan.baidu.com/s/12Cg51L0hRn5w-m1NQJ-Xlg 提取码:i1cd 很多时候我们需要统计自己所写的代码的数量.举个栗子 ...

  8. Django的下载与创建。

    一.下载 (1)下载命令. 在cmd中输入下载命令: pip3 install django==1.11.11 1.11.11是该版本号. (2)pycharm中下载 直接在pycharm中下载set ...

  9. IntelliJ IDEA 版本控制 GIT(四)

    1. 从GitLab或GitGitHub中检出项目 VCS - Checkout from Version Control - Git 2. 更新项目 第一种:更新当前窗口下的整个项目 第二种:更新相 ...

  10. Velocity与Jsp、Freemarker的对比

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支持 ...