Python自动载入模块时模块变更需重启主程序问题

问题现象:    

        编写一套python程序使用自动载入功能,python主程序放置后台运行,我们经常遇到修改了子模块需要重启主程序,特别是修改一个小功能也需要重启主程序很是麻烦。

解决思路:

  1. 每次检测模块是否载入,如果载入考虑使用reload来重载模块
  2. 每次执行之后删除载入的模块,下次运行时再载入模块
  3. 配置模块版本文件,每次运行的时候检查版本,检测到新的版本时,可以使用1或2的方法重载模块
  4. 检测模块文件的更新时间,(此处存在一个文件,就是文件更新时间与当前时间相差多少作为重载的条件合适)

程序编写: 

    我选择的是第二种方式,没有特殊理由,也没有考虑这样产生的负载;就是觉得可以少做一次检测。理论上每次重新载入模块可能会增加服务器负担

此处以flask为例编写的模块自动载入。

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import os, sys, re, types
from flask import Flask

app = Flask(__name__)

@app.route( '/api/<m_name>/<m_func>', methods=['GET', 'POST'] )
def LoadModules(m_name, m_func):
	try:
		obj = __import__('api.'+m_name, {}, {}, m_name)
		mf = getattr(obj,m_func)
		if type(mf) is types.FunctionType:
			result =  mf()
		elif type(mf) is types.ClassType:
			c = mf()
			d = getattr(c, m_func)
			result = d()
		elif type(mf) is types.InstanceType:
			result = mf.m_func()
	except:
		result = "Your module error " + m_name
	else:
		del sys.modules['api.'+m_name]
		del m_name
	finally:
		return result

if __name__ == '__main__':
    app.run('0.0.0.0', '8888')

 

转载于:https://my.oschina.net/tevisky/blog/810154

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值