`
jjchen_lian
  • 浏览: 86444 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python模块热更新

 
阅读更多

下面代码摘自web.py框架

 

selfimport sys
import os

class Reloader:

    if sys.platform.startswith('java'):
        SUFFIX = '$py.class'
    else:
        SUFFIX = '.pyc'

    def __init__(self):
        self.mtimes = {}

    def __call__(self):
        import pdb
        pdb.set_trace()
        for mod in sys.modules.values():
            self.check(mod)

    def check(self, mod):
        if not (mod and hasattr(mod, '__file__') and mod.__file__):
            return 

        try:
            mtime = os.stat(mod.__file__).st_mtime
        except (OSError, IOError):
            return

        if mod.__file__.endswith(self.__class__.SUFFIX) and os.path.exist(mod.__file__[:-1]):
            mtime = max(os.stat(mod.__file__[:-1].st_mtime), mtime)

        if mod not in self.mtimes:
            self.mtimes[mod] = mtime
        elif self.mtimes[mod] < mtime:
            try:
                reload(mod)
                self.mtimes[mod] = mtime
            except ImportError:
                pass

reloader = Reloader()
reloader()

 第一个知识点:

self.__class__.SUFFIX,首先python一切皆对象,类实际上在python的世界里面也是一个对象,__class__至少在下面这种情况中是有用的:当一个类中的某个成员变量是所有该类的对象的公共变量时.

很像java中的static变量。

第二个知识点:

__import__与reload的区别:

(1):多次重复使用import语句时,不会重新加载被指定的模块,只是把对该模块的内存地址给引用到本地变量环境。

(2)对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过。reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;reload后还是用原来的内存地址;不能支持from。。import。。格式的模块进行重新加载。 

(3)通常在动态加载时可以使用到这个函数,比如你希望加载某个文件夹下的所用模块,但是其下的模块名称又会经常变化时,就可以使用这个函数动态加载所有模块了,最常见的场景就是插件功能的支持。比如__import__可以这样__import__('os',globals(),locals(),['path','pip']) ,reload就不行了。

具体可以参考看看这篇文章http://www.cnblogs.com/MaggieXiang/archive/2013/06/05/3118156.html

第三个知识点:

__call__的用法,可调用对象,这个确实是第一次接触到,大概的用法就是我们只需要去重载这个方法,那么我们就可以像调用方法的形式去调用对象,那么它就会去回调这个__call__方法,具体的好处可以参看这个博客

http://hi.baidu.com/feng2211/item/d55d0415602bfcfcdceeca45

分享到:
评论

相关推荐

    Python-GPUtil是一个Python模块使用nvidiasmi从NVIDAGPU获取GPU状态

    Python-GPUtil是一个强大的Python模块,它允许程序员通过NVIDIA的`nvidia-smi`工具以编程的方式获取NVIDIA GPU的状态信息。在GPU计算日益重要的今天,对于需要监控和管理GPU资源的开发者来说,这个模块显得尤为重要...

    Python微博热搜榜信息爬取项目.zip

    如果使用的是SQLite,Python的sqlite3模块将非常方便,可以直接在Python代码中执行SQL操作。 此外,项目可能还涉及到了错误处理和异常处理,以确保程序在遇到问题时能够稳定运行。比如,当网络请求失败或解析错误时...

    Python-PyUpdater用于pyinstaller的一个自动更新框架

    集成PyUpdater到项目中,你需要在你的主程序文件中导入必要的模块,并设置更新服务器地址、应用信息等参数。以下是一个简单的示例: ```python from pyupdater.client import Client app_id = 'your_app_id' app_...

    微博热搜数据可视化分析系统技术框架python + flask web + echart + mysql + 爬虫模块 +

    python + flask web + echart + mysql + 爬虫模块 + CSV(基于csv分析显示,csv使用八爪鱼获取或者自己生成也行) 模块分析 登录模块 选择领域模块 (本系统出来微博爬虫,还基于csv文件分析) 微博信息模块 (它有一...

    python实现的cocos热更工具

    Cocos Creator是一款强大的2D游戏引擎,支持跨平台开发,而“Python实现的Cocos热更工具”则是为了简化Cocos Creator游戏的热更新流程而设计的。 这个工具的核心功能是生成热更列表,它遍历`src`和`res`两个关键...

    热辐射可视化,热辐射成像,Python

    本文将深入探讨如何使用Python进行热辐射可视化和热辐射成像。热辐射是物体因温度差异而发射电磁波的现象,主要体现在红外线区域。在科学研究、工程应用以及环境监测等领域,理解和分析热辐射具有重要意义。 首先,...

    Python应用实战代码-将游戏评论做成热词云图

    Python的collections模块中的`Counter`类可以帮助我们轻松地完成这项任务。通过`Counter(words)`可以得到一个字典,其中键是单词,值是其出现次数。 5. **热词云图**: 为了视觉化这些高频词汇,我们将使用Python...

    基于遗传算法和Python多处理器并行计算的二阶热传导方程初边值问题数值解法.pdf

    本文献主要讨论了如何使用遗传算法结合Python的多处理器并行计算技术来求解二阶热传导方程初边值问题的数值解法。下面将详细介绍本文献涉及的几个关键知识点。 首先,二阶热传导方程是一类偏微分方程,它是热力学中...

    python爬虫从入门到精通(模块)

    python从入门到精通第二版pdf 这份文档旨在帮助想要学习Python爬虫的初学...4. 爬虫实战:爬取微博热搜榜 在学习过程中,我们将会提供大量的代码示例和实战项目,以帮助您更好地理解和掌握Python爬虫。祝您学习愉快!

    Python-汤不热python多线程爬虫

    【Python-汤不热python多线程爬虫】 在Python编程中,Web爬虫是一种用于自动提取网页数据的工具,广泛应用于数据分析、信息提取、搜索引擎优化等领域。本项目聚焦于使用Python实现对“汤不热”(tumblr)平台的多...

    FLIR红外相机python调用SDK

    通常,这个过程包括将库添加到Python的路径中,确保系统能够找到并正确加载所需的模块。 2. **连接和初始化相机**: 使用SDK,你可以编写Python代码来查找和连接到可用的FLIR红外相机。初始化相机后,你可以设置...

    Python实现的Telegram Bot机器人框架,具有插件系统,插件支持热更新和热装载.zip

    Python使用技巧,实战应用...详细介绍了一些Python框架的各种功能和模块,以及如何使用Python进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者,能够帮助你快速上手JPython并掌握其高级特性。

    基于python微博热搜数据分析系统设计与实现.docx

    ### 基于Python微博热搜数据分析系统设计与实现 #### 概述 随着社交媒体网络的快速发展及智能手机的广泛普及,越来越多的网民倾向于在社交媒体平台上分享自己对于时事热点的观点和感受。微博作为中国最大的社交...

    Python-AuditRss用于监控大佬博客的Rss然后推送到钉钉

    4. **可扩展性**:作为一个Python项目,AuditRss可能采用了模块化设计,允许开发者根据需求进行自定义扩展,例如添加新的推送渠道,或者实现更复杂的过滤规则。 5. **安全相关**:作为标签“Python开发-安全相关”...

    Python3教程菜鸟教程.pdf

    标准库概览部分将展示Python自带的各种实用模块,如正则表达式、CGI编程、MySQL数据库连接、网络编程、SMTP邮件发送、多线程、XML解析、JSON数据解析以及日期和时间操作。 【其他技术教程】 除了Python3,教程还...

    Python 实现微博热搜并保存热搜信息

    6. **保存为JSON**:Python内置了`json`模块,可以方便地将数据序列化为JSON格式。使用`json.dump()`函数,将热搜话题的字典列表写入到本地文件中,文件名可以根据需求自定义,这里可能是"weibo-hot-search.json"。 ...

    Abaqus-Python开发使用指南,python在abaqus中的应用电子版,Python

    通过阅读《Abaqus-python入门体会》这份文档,你可以了解到如何设置工作环境,导入所需的模块,以及编写基本的建模和分析脚本。 **Abaqus-Python开发使用指南** 这份详尽的指南将深入探讨Abaqus-Python开发的各个...

    Python的配置文件

    为了实现配置的动态加载和热更新,可以在程序运行期间监控配置文件的变化,并在文件更新时重新加载配置。可以使用`watchdog`库来监听文件系统的变动。 9. **配置文件的最佳实践** - 将配置文件和代码分开存放,以...

    AMG8833 python驱动_AMG8833_amg8833python_AMG8833python驱动_amg8833系列

    2. 引入库:在Python脚本中引入`adafruit_amg88xx`模块。 3. 初始化传感器:创建`AMG8833`类的实例,通常会需要传入一个I2C对象来连接传感器。 4. 读取数据:调用`get_temperature_grid()`方法,它会返回一个二维...

    ABAQUS Python二次开发攻略-配书资源code_python_pythonabaqus_Abaquspython二次开

    2. **ABAQUS API介绍**:了解ABAQUS提供的Python接口,包括`abaqus`、`cae`、`mdb`等模块,以及它们在模型创建、操作和结果分析中的作用。 3. **模型创建**:学习如何通过Python脚本来创建几何模型、定义材料属性、...

Global site tag (gtag.js) - Google Analytics