zoukankan      html  css  js  c++  java
  • python3使用importlib来重复加载模块

    #-*- coding:utf-8 -*-
    from socketserver import ThreadingTCPServer, BaseRequestHandler
    import importlib
    import traceback
    import time
    import logging
    logging.basicConfig(level=logging.DEBUG,
      filename="log/xxgl_%s.log" % (time.strftime("%Y%m%d", time.localtime())),
      filemode='a',
      format='%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s: %(message)s')
    module_list = {}

    class MyBaseRequestHandler(BaseRequestHandler):
    def handle(self):
      #循环监听(读取)来自客户端的数据
      while True:
        try:
          #一次读取1024字节,并去除两端的空白字符(包括空格,TAB, , )
          data = self.request.recv(1024).strip()
          data = data.decode()
          if data == '':
            break

          #self.client_address是客户端的连接(host, port)的元组
          logging.info("receive from %r: [%r]" % (self.client_address, data))
          ret = self.exec_sub(data, data)
          self.request.sendall(ret.encode())
        except:
          #traceback.print_exc() #当客户端主动断开连接时,self.recv(1024)会抛出异常
          break

    def findModule(self, procName):
      try:
        return module_list[procName]
      except:
        logging.debug("module_list[%s] not found" % (procName))
        return None

    #根据报文名称调用对应的模块,并传递参数,将执行结果返回给客户端
    def exec_sub(self, procName, params):
      try:
        proc = self.findModule(procName)
        logging.debug(str(proc))
        if proc == None:
          proc = importlib.import_module(procName)
          module_list[procName] = proc
          logging.debug('import_module: ' + procName)
        else:
          importlib.reload(proc)
          time.sleep(1) #不延时会重新加载失败
          logging.debug('reload: ' + procName)
        result = proc.call_sub(params)
        return result
      except Exception as e:
        logging.error(str(e))
        return "error"

    if __name__ == "__main__":
      host = "" #主机名,可以是ip,像localhost的主机名,或""
      port = 9999 #端口
      addr = (host, port)
      server = ThreadingTCPServer(addr, MyBaseRequestHandler)
      server.serve_forever()

  • 相关阅读:
    解决做好一个机器学习项目的3个问题
    VMwareworkstations14 安装arch
    python3学习笔记——数字、字符串、列表、字典、元组
    python2和python3编码
    重定向和伪静态的原理、语法、实践
    HTTP中的重定向和请求转发的区别
    linux+Apache开启伪静态配置
    Centos7下Yum安装PHP5.5,5.6,7.0
    windows10图形化连接CentOS7
    python学习笔记--类(一)
  • 原文地址:https://www.cnblogs.com/zsfishman/p/11407108.html
Copyright © 2011-2022 走看看