使用tornado做个能承担高负载的接口,配置部分是否要使用配置文件(ConfigParser)。现在有两个问题需要测试。第一、配置文件是否一次性加载,我可不希望,每次调用都会加载配置文件。第二、修改配置文件是否可以自动加载。在tornado中py文件可以自动加载,这样服务就不需要重启,服务也不会间断。
首先是做一个tornado的测试页。在目录opt下建立testconfig文件夹,在testconf下编写代码。共有4个文件。
主文件 main.py 代码如下:
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------------------------------------------------------- # Filename: main.py # Revision: 1.0 # Date: 2012-11-18 # Author: simonzhang # Email: simon-zzm@163.com # Web: www.simonzhang.net # ----------------------------------------------------------------------------- import tornado.ioloop import tornado.web from index import * application = tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
主文件要调用的部分 index.py 代码如下:
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------------------------------------------------------- # Filename: main.py # Revision: 1.0 # Date: 2012-11-18 # Author: simonzhang # Email: simon-zzm@163.com # Web: www.simonzhang.net # ----------------------------------------------------------------------------- import tornado.ioloop import tornado.web import ConfigParser # 配置进行全局加载,如果是放到类中肯定每次都有IO。 cf = ConfigParser.ConfigParser() cf.read("config.properties") get_index_file_path = cf.get(cf.sections()[0], "path") class MainHandler(tornado.web.RequestHandler): def get(self): read_file = open(get_index_file_path, "rb").read() self.write("%s" % read_file)
配置文件名为config.properties内容如下:
[context_path]
path = index.txt
创建一个index.txt文件,在里面写点要显示的文件。
开始编写监控配置文件IO的脚本。监控文件变化的部分详见:http://www.simonzhang.net/?p=429。还不知道watchdog能不能做到这个。
脚本名为 watchfile.py 代码如下:
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------------------------------------------------------- # Filename: watchfile.py # Revision: 1.0 # Date: 2012-11-17 # Author: simonzhang # Email: simon-zzm@163.com # Web: www.simonzhang.net # ----------------------------------------------------------------------------- import re import pyinotify wm = pyinotify.WatchManager() mask = pyinotify.IN_OPEN class EventHandler(pyinotify.ProcessEvent): def process_IN_OPEN(self, event): self.rebuild(event) def rebuild(self, event): if (event.dir == False) and (event.name == 'config.properties') : print "open config file" def main(): handler = EventHandler() notifier = pyinotify.Notifier(wm, handler) wdd = wm.add_watch('/opt/testconfig',mask, rec=True,auto_add=True ) notifier.loop() if __name__ == "__main__": main()
最终测试结果。第一、配置文件是在服务启动时一次加载。第二、配置文件不能自动加载,修改完配置文件必须要重启服务。
使用ConfigParser来做配置文件,自然非常方便,tornado重启速度很快,但是我还是希望能自动加载,因为在几百台服务的情况下,能自动加载自然比需要重启更方便。所以当前就是把配置直接写到代码中,然后找个文件记录配置位置。之后再研究一下能不能热重启。如果大家有好的办法也烦请请告诉我一声。
发表评论