在用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() 是一样的。

tornado autoreload 模式的更多相关文章

  1. tornado 多进程模式

    https://www.douban.com/note/217901726/ 官方文档的helloworld实例中的启动方法: if __name__ == "__main__": ...

  2. Tornado异步模式

    先介绍下背景:由于工作需要,前段时间又写了一段爬虫去获取和更新一些数据.之前爬虫主要用Scrapy框架批量爬取一些页面数据,或者用Gevent调用目标站点的接口.偶然看到了Tornado,听说这个框架 ...

  3. tornado多进程模式不同进程写不同日志

    #coding: utf- ''' Author: Time: Target: ''' import logging import logging.handlers import os import ...

  4. tornado中使用torndb,连接数过高的问题

    问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...

  5. Python Tornado初学笔记之表单与模板(一)

    Tornado中的表单和HTML5中的表单具有相同的用途,同样是用于内容的填写.只是不同的是Tornado中的表单需要传入到后台,然后通过后台进行对模板填充. 模板:是一个允许嵌入Python代码片段 ...

  6. tornado框架源码分析---Application类之debug参数

    先贴上Application这个类的源码. class Application(httputil.HTTPServerConnectionDelegate): """A ...

  7. tornado设置settings

    1.作用 设置应用程序相关参数 2.用法 settings = dict() settings["debug"] = True tornado.web.Application.__ ...

  8. tornado 入门

    Overview FriendFeed是一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 weba ...

  9. tornado详细介绍

    Tornado Web服务器概览,tornado教程,tornado开发教程 概览 漏洞 | 漏洞目录 | 安全文档 Overview 下载和安装 模块索引 主要模块 底层模块 Tornado 攻略 ...

随机推荐

  1. 关于JQ的$.deferred()

    此文章是在网络上看到的. 一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比 ...

  2. java 将list 按长度分割

    public static <T> List<List<T>> splitList(List<T> list, int pageSize) {      ...

  3. 游戏引擎PushButtonEngine简介

    PushButtonEngine是一个开源的模块化游戏引擎,你可以通过https://github.com/PushButtonLabs/PushButtonEngine得到其代码和相关文档.下面我将 ...

  4. 【20160924】GOCVHelper 图像处理部分(1)

    增强后的图像需要通过图像处理获得定量的值.在实际程序设计过程中,轮廓很多时候都是重要的分析变量.参考Halcon的相关函数,我增强了Opencv在这块的相关功能.      //寻找最大的轮廓     ...

  5. Auty自动化测试框架第二篇——读取与执行脚本列表

    [本文出自天外归云的博客园] 在Auty中的文件结构,lib目录下的read_selection.py和execute_selection.py文件:

  6. 使用异步js解决模态窗口切换的办法

    核心代码 js ="setTimeout(function(){document.getElementsByTagName('Button')[3].click()},100);" ...

  7. [问题2015S08] 复旦高等代数 II(14级)每周一题(第九教学周)

    [问题2015S08]  设 \(A\) 为 \(n\) 阶复方阵, 证明: \(A\overline{A}\) 与 \(\overline{A}A\) 相似, 其中 \(\overline{A}\) ...

  8. consul笔记-集群加入的问题

    加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...

  9. java编写一个可以上、下、左、右移动的坦克

    唉,本人学习进度缓慢,但依然会坚持不懈!有感兴趣的朋友可以在下面留言. 源代码献上: /* * 画出我的坦克,使他可以上下左右移动 */package com.test4; import javax. ...

  10. Linux架构

    Linux架构   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我以下图为基础,说明Linux的架构(architecture ...