python 如何重载模块,用一个简单的例子来解释
2016-03-25 09:44
806 查看
flask 在调试时,如果我们对文件有所修改,服务器就会重新启动,而无需我们停下服务器再重新启动,这里面就暗藏了一个重载的机制。
下面用一个简单的例子,来解释python如何重载一个模块
新建一个名为reloadsetting.py 的文件,内容很简单:
再新建一个名称为reloaddemo.py的文件,内容为:
我们启动运行reloaddemo.py ,一个线程不停的打印reloadsetting模块中的msg,一个线程不停的尝试重载reloadsetting模块。在运行过程中,修改reloadsetting模块中的msg的内容,很快,打印出来的内容也会随之发生变化,你可能会担心,如果在修改时不慎写错了代码,比如把msg给删除掉了,或者写成了 msg = ,而后面根本就没有赋值,那重载岂不是就失败了么,这种担忧是多余的,即便模块reloadsetting中有错误,那么在调用reload函数时,也不会发生错误,模块仍然是上一次有效reload后的状态,不信,你可以试一试
下面用一个简单的例子,来解释python如何重载一个模块
新建一个名为reloadsetting.py 的文件,内容很简单:
#coding=utf-8 ''' Created on 2016-3-25 @author: Administrator ''' msg = 'change it '
再新建一个名称为reloaddemo.py的文件,内容为:
#coding=utf-8 ''' Created on 2016-3-25 @author: Administrator ''' import threading import reloadsetting import sys,os, time def printworker(): while True: time.sleep(1) print reloadsetting.msg def auto_reload(): while True: mods = ["reloadsetting"] # the need reload modules for mod in mods: try: module = sys.modules[mod] except: continue #获得文件的名字 filename = module.__file__ #pyc结尾的文件,只在第一次载入时生成,因此,即便我们对文件进行了修改,运行中,它的修改时间是不会变的 if filename.endswith(".pyc"): filename = filename.replace(".pyc", ".py") #获得文件上一次修改的时间 mod_time = os.path.getmtime(filename) #module.__dict__ 里保存了模块的信息,具体参考globals函数 if not "loadtime" in module.__dict__: module.loadtime = 0 # first load's time 1* try: #如果修改时间大于上一次载入的时间,那么就重新载入 if mod_time > module.loadtime: reload(module) except: pass module.loadtime = mod_time time.sleep(1) if __name__ == '__main__': t_reload = threading.Thread(target=auto_reload) t_reload.start() t_reload2 = threading.Thread(target=printworker) t_reload2.start()
我们启动运行reloaddemo.py ,一个线程不停的打印reloadsetting模块中的msg,一个线程不停的尝试重载reloadsetting模块。在运行过程中,修改reloadsetting模块中的msg的内容,很快,打印出来的内容也会随之发生变化,你可能会担心,如果在修改时不慎写错了代码,比如把msg给删除掉了,或者写成了 msg = ,而后面根本就没有赋值,那重载岂不是就失败了么,这种担忧是多余的,即便模块reloadsetting中有错误,那么在调用reload函数时,也不会发生错误,模块仍然是上一次有效reload后的状态,不信,你可以试一试
相关文章推荐
- PHP + PYTHON 多任务多线程,后台运行,计划任务-实现方法
- Python信号处理模块signal
- python中字典(dict)常见用法
- python2.7:模块安装4种方法
- Python基础教程
- python写个图片爬虫
- python中元组(tuple)用法总结
- python
- 转载一篇python类的博文
- Python入门 之 dict
- Python-pip 安装失败问题解决
- 初始Python类
- Python基础教程之正则表达式基本语法以及re模块
- 用Python实现斐波那契(Fibonacci)函数
- python Django批量导入不重复数据
- python Django批量导入数据
- python Django框架实现自定义表单提交
- ubuntu ,python 安装pillow
- Python学习第十一天
- Python学习第十二天