博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网站搭建笔记精简版---廖雪峰WebApp实战-Day13:提升开发效率笔记
阅读量:4164 次
发布时间:2019-05-26

本文共 2059 字,大约阅读时间需要 6 分钟。

悔不当初啊,怎么没早看到这个Day13的教程呢。

本篇博客是为了解决每次写完代码后需要在cmd命令行ctrl + C中断程序然后重新启动的问题。
本文的思路是检测www目录下的代码改动,一旦有改动,就自动重启服务器。
因此按照这个思路,我们可以编写一个辅助程序pymonitor.py,,并时刻监控www目录下的代码改动,当有改动的时候,先把当前app.py进程杀掉,再重启,就完成了服务器进程的自动重启。

安装watchdog库

要监控目录文件的变化,我们也无需自己手动定时扫描,Python的第三方库watchdog可以利用操作系统的API来监控目录文件的变化,并发送通知。代码:

pip install watchdog

编写看门狗程序

#!/usr/bin/env python3# -*- coding: utf-8 -*-__author__ = 'Michael Liao'import os, sys, time, subprocessfrom watchdog.observers import Observerfrom watchdog.events import FileSystemEventHandlerdef log(s):    print('[Monitor] %s' % s)class MyFileSystemEventHander(FileSystemEventHandler):    def __init__(self, fn):        super(MyFileSystemEventHander, self).__init__()        self.restart = fn    def on_any_event(self, event):        if event.src_path.endswith('.py'):            log('Python source file changed: %s' % event.src_path)            self.restart()command = ['echo', 'ok']process = Nonedef kill_process():    global process    if process:        log('Kill process [%s]...' % process.pid)        process.kill()        process.wait()        log('Process ended with code %s.' % process.returncode)        process = Nonedef start_process():    global process, command    log('Start process %s...' % ' '.join(command))    process = subprocess.Popen(command, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)def restart_process():    kill_process()    start_process()def start_watch(path, callback):    observer = Observer()    observer.schedule(MyFileSystemEventHander(restart_process), path, recursive=True)    observer.start()    log('Watching directory %s...' % path)    start_process()    try:        while True:            time.sleep(0.5)    except KeyboardInterrupt:        observer.stop()    observer.join()if __name__ == '__main__':    argv = sys.argv[1:]    if not argv:        print('Usage: ./pymonitor your-script.py')        exit(0)    if argv[0] != 'python': #注意这里将python3改为python        argv.insert(0, 'python') #这里也是,否则会报错    command = argv    path = os.path.abspath('.')    start_watch(path, None)

测试展示

watchdog参考博客

转载地址:http://lmlxi.baihongyu.com/

你可能感兴趣的文章
Java设计模式(1) - 单例设计模式多种写法
查看>>
Java设计模式(2) - 工厂设计模式
查看>>
Java多线程(8) - 同步(并发)类容器详解(CopyOnWrite容器、ConcurrentMap容器、Queue队列容器)
查看>>
Java设计模式(3) - 多线程并发设计模式 - Future设计模式
查看>>
Java设计模式(5) - 多线程并发设计模式 - 生产者-消费者设计模式多种写法
查看>>
Java多线程(9) - 多线程 - 线程池详解与使用示例
查看>>
Java多线程(10) - 多线程 - CountDownLatch、CyclicBarrier、Semaphore使用示例详解
查看>>
Java多线程(11) - 多线程 - 锁详解:重入锁、公平锁、非公平锁、读写锁、不可重入锁、自旋锁、独享锁、共享锁、互斥锁、悲观锁、乐观锁、分段锁、偏向锁、轻量级锁、重量级锁、CAS算法原理
查看>>
Java网络编程(10) - Netty网络编程常见问题与疑问
查看>>
设置Django连接到Google Cloud SQL(MYSQL)
查看>>
爬虫: 基于Node.js的强大爬虫,能直接发布抓取的文章哦
查看>>
Django学习笔记 扩展User模型
查看>>
Django资料总结
查看>>
Android进阶系列-发布项目到Jcenter
查看>>
基于Zxing的二维码扫描解析库——ZxingPlus
查看>>
算法入门-程序设计入门
查看>>
java数据结构-数据结构的概述
查看>>
java -Math常用方法
查看>>
Android进阶系列-手写数据库框架
查看>>
算法入门-循环结构程序设计
查看>>