tornado中的options常用姿势
tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和从配置文件中解析参数。使用步骤如下:
- 源码中的示例代码,定义全局变量:
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)
...
- 在模块的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"
- 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()
tornado中的options常用姿势的更多相关文章
- tornado中使用torndb,连接数过高的问题
问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...
- 在tornado中使用celery实现异步任务处理之中的一个
一.简单介绍 tornado-celery是用于Tornado web框架的非堵塞 celeryclient. 通过tornado-celery能够将耗时任务增加到任务队列中处理, 在celery中创 ...
- 深入tornado中的协程
tornado使用了单进程(当然也可以多进程) + 协程 + I/O多路复用的机制,解决了C10K中因为过多的线程(进程)的上下文切换 而导致的cpu资源的浪费. tornado中的I/O多路复用前面 ...
- 基于python3.x,使用Tornado中的torndb模块操作数据库
目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...
- [转帖]「日常小记」linux中强大且常用命令:find、grep
「日常小记」linux中强大且常用命令:find.grep https://zhuanlan.zhihu.com/p/74379265 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍 ...
- 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 ...
- .net core中的那些常用的日志框架(Serilog篇)
前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...
- .net core中的Options重新加载机制
Options是.net core提出的一种辅助配置机制,即选项. 目前,我们可以使用的Options有五种(源码): IOptionsFactory<>:Options的创建工厂(Sin ...
- datatables中的Options总结(3)
datatables中的Options总结(3) 十.ColReorder colReorder.fixedColumnsLeft 不允许x列重新排序(从左数) colReorder.fixedCol ...
随机推荐
- 关于如何清除某个特定网站的缓存---基于Chrome浏览器
1.清除浏览器缓存 直接在浏览器设置里面清除浏览器的缓存会清除所有网站的缓存信息,这在某些时候是非常不方便的,毕竟不只有测试网站,还会有一些我们不想清除的信息也会被清除掉: 2.通过F12功能去清除浏 ...
- spark streaming checkpointing windows
spark streaming的相关概念: spark的核心是创建一个RDD对象,然后对RDD对象进行计算操作等 streaming可以理解为是 一个连续不断的数据流 ,然后将每个固定时间段里的数据构 ...
- RAID5的创建(5块磁盘,三块做raid,两块做备份)
RAID5的创建(5块磁盘,三块做raid,两块做备份) 第一步:参考我的上一篇博客,用同样的方法添加5块硬盘.地址如下: https://www.cnblogs.com/Feng-L/p/11735 ...
- golang数据结构和算法之LinkedList链表
差不多自己看懂了,可以自己写测试了.:) LinkedList.go package LinkedList //"fmt" type Node struct { data int ...
- luoguP4404缓存交换
https://www.luogu.org/problem/P4404 题意 你有一个大小为n的缓存区,有个长度为m的查询序列. 每次查询的时候需要把查询值放入缓存,若缓存已满,则先删除任一位置再将其 ...
- lua 12 table 的使用
转自:http://www.runoob.com/lua/lua-tables.html table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table ...
- UTC和GMT什么关系?moment处理世界时问题
UTC和GMT什么关系? 个人理解,两者基本一样,要说区别,那就是UTC更准确,而GMT误差有点.由于历史原因,以前用GMT,后来发现有些误差,改用UTC 我们可以看到,JS的 Date() 用的是G ...
- Java 发红包
使用Java实现发红包的功能. 结构: package redPocket User.java Manager.java Member.java Demo.java 思路: Manager和Membe ...
- Java连载7-变量&数据类型
一.变量 1.注意点: 在同一个“作用域”中,变量名不能重名,但是变量可以重新赋值. 2.什么是作用域? 答:描述的是变量的有效范围,在范围之内是可以被访问的,只要出了作用域就无法访问(也就是在大括号 ...
- 修改centos服务器时区并同步最新时间
rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate cn.pool.ntp.org ...