zoukankan      html  css  js  c++  java
  • tornado autoreload 模式

    在用tornado进行 网络程序编写的时候,肯定要对代码进行修修改改,如果每次都要重启server的话,会是很麻烦的事情。tornado提供了autoreload模式。

    一,要开始autoreload模式,可以在setting中进行设置,可以将debug模式开启,debug模式开启时,autoreload模式会自动开启;当然也可以显示的设置autoreload为True;或者可以debug=True,autoreload=False;

    ........

    if self.settings.get('debug'):
        self.settings.setdefault('autoreload', True)
        self.settings.setdefault('compiled_template_cache', False)
        self.settings.setdefault('static_hash_cache', False)
        self.settings.setdefault('serve_traceback', True)

    # Automatically reload modified modules
        if self.settings.get('autoreload'):
        from tornado import autoreload
        autoreload.start()

    ........

    tornado中的web.py模块的一部分代码;

    二,autoreload的实现原理是将各个文件的路径和文件的修改时间缓存起来;然后利用ioloop.py,定时得去check各个文件目前的修改时间和缓存中的时间是否一致,如果不一致,则加载;

    def start(io_loop=None, check_time=500):
        """Begins watching source files for changes.

        .. versionchanged:: 4.1
        The ``io_loop`` argument is deprecated.
        """
        io_loop = io_loop or ioloop.IOLoop.current()
        if io_loop in _io_loops:
            return
        _io_loops[io_loop] = True
        if len(_io_loops) > 1:
            gen_log.warning("tornado.autoreload started more than once in the same process")
            add_reload_hook(functools.partial(io_loop.close, all_fds=True))
        modify_times = {}
        callback = functools.partial(_reload_on_update, modify_times)
        scheduler = ioloop.PeriodicCallback(callback, check_time, io_loop=io_loop)
        scheduler.start()

    代码来自autoreload.py,  add_reload_hook是重加载时的回调函数;_reload_on_update 检查模块和模块的修改时间,并重新加载;

    三,如果想让某个脚本启动autoreload模式,tornado提供了两种方式,一种是命令行运行,一种是讲autoreload的代码嵌入到脚本之中;

    python -m tornado.autoreload path/to/script.py [args...]  或 python -m tornado.autoreload -m module.to.run [args...]

    这种方式与在脚本中嵌入 autoreload.wait() 是一样的。

  • 相关阅读:
    Windows10打印mumu模拟器日志
    简析快速排序
    数字转换为W,K,结尾,并可指定长度(仅供参考,个人测试使用。)
    简析选择排序
    简析冒泡排序
    NX二次开发 工程图创建孔表功能
    NX二次开发 建模座标和工程图座标映射
    NXOpen绝对座标值转为WCS座标值
    NX二次开发 结合包容盒快速创建WCS
    NX二次开发 数值转NXString字符
  • 原文地址:https://www.cnblogs.com/yuhan-TB/p/4662559.html
Copyright © 2011-2022 走看看