下载了tornado 0.1的代码进行学习,之所以选择tornado,是看网上对非阻塞模式评价很高,他也不仅仅是web框架,而且相对django来说代码少多了(django的代码也有看)。选择0.1的原因还是代码相对简单,差别也不大。
查看demos里的helloworld,代码如下:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import logging
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
从options倒入options和define。先看看官方的描述:
命令行解析模块,来定义使用参数。
例如:上边代码中define("port", default=8888, help="run on the given port", type=int)这句,当年在终端输入helloworld.py --help的时候,将会有“--port run on the given port (default 8888)”的提示。
tornado.options.parse_command_line()这一行是对命令行进行解析,格式:("--myoption=myvalue")。也可以是配置文件解析tornado.options.parse_config_file("/etc/server.conf"),配置文件必须是python文件,像:
myoption = "myvalue"
myotheroption = "myothervalue"
参数指定类型type可以是:datetimes, timedeltas, ints, and floats。
主要说_Options()和_Option()
344行实例化了类_Options,options = _Options.instance(),options现在为空字典,以后将 存储所有选项,通过上边提到的三种方式,添加是只通过define()。
_Option的参数来自define,metavar选择类型的参数,multiple=True会解析多个值,结果列表保存。
这个类里有个有parse()方法,学到很多知识。主要用于解析命令行下的参数,需要将选项对应的类型进行转换,作者使用_parse={type:parse_option_func}.get(type,type)的方法,然后通过_parse(value)进行解析转换参数。没有定义过的解析方法就直接使用type(value)转换了,只能说作者好强大。
代码的最后定义了几个默认设置。0.1的里面有help和logging。
对于options模块里的log代码等下一次总结,剩下的几个函数就很简单了,就不记录了。
上一篇: python处理rss,atom之feedparser
下一篇: vim配置python版编辑器
0 Responses so far.