Python实践:模块自动重载
admin
2023-07-31 00:37:04
0
  • 一、概述
  • 二、思路
  • 三、实现
  • 四、测试
    • 1、开启自动重载(终端1)
    • 2、修改模块(终端2)
    • 3、查看实时输出(终端1)
  • 五、参考源码

一、概述

开发Web程序时,通常会采用本地服务器进行调试,但如果代码有变动,就需要重启服务器。开发过程中修改代码是经常的事,不断地重启服务器既麻烦又耗时。因此为了避免这种笨拙的行为,在流行的Web框架中,都提供了 模块自动重载 的功能:不用重启服务器,自动重新加载有变动的模块。

自动 的方式有很多,具体跟Web框架的实现强相关。像web.py中就是通过每次处理请求时都尝试重载来模拟自动,而flask中则是使用独立线程来完成的。简单起见,本文的测试代码中采用while循环(独立进程)来实现自动。

二、思路

遍历已经加载的所有模块,查看每个模块的对应文件的最近修改时间,如果时间有变化,则重新加载该模块。

三、实现

12345678910111213141516171819202122232425262728293031323334353637383940 #!/usr/bin/env python# -*- coding: utf-8 -*- \”\”\”Reload modules if modified usage:    python reloader.py [test_module_name]\”\”\” import sysimport os mtimes = {} def do_reload(handler=None):    \”\”\”Reload modules if modified    \”\”\”    for module in sys.modules.values():        # get filename        filename = getattr(module, \’__file__\’, None)        if not (filename and os.path.isfile(filename)):            continue         # handle python file extensions        # for more details about this topic,        # see http://stackoverflow.com/questions/8822335/what-does-python-file-extensions-pyc-pyd-pyo-stand-for        if filename[4:] in (\’.pyc\’, \’.pyo\’, \’.pyd\’):            filename = filename[:1] # get the \’.py\’ file         # get the time of most recent content modification        try:            mtime = os.stat(filename).st_mtime        except OSError:            continue         # reload `module` if it\’s modified        old_time = mtimes.get(module)        if old_time is None: # the first time in this function, just record mtime            mtimes[module] = mtime        elif old_time

四、测试

1、开启自动重载(终端1)

123 $ touch testmod.py$ python reloader.py testmodstart reloading module `testmod` automatically...

2、修改模块(终端2)

12 $ vi testmod.py...

3、查看实时输出(终端1)

一旦对testmod.py有修改保存,终端1中会立即打印出模块testmod的当前所有属性。当然,也可以修改handler来实现其他的处理方式。

五、参考源码

(1)web.py的Reloader

(2)werkzeug的_reloader_stat_loop


相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...