返回顶部
首页 > 资讯 > 后端开发 > Python >Python Module Auto R
  • 703
分享到

Python Module Auto R

PythonModuleAuto 2023-01-31 07:01:12 703人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python 的模块一旦加载就会常驻内存,直到程序结束。再碰到 import 语句式只是修改名字空间,而不需要重新加载。这种机制是出于运行时的效率考虑,每遇到 import 的时候重新加载显然很低效。它也不会检查源文件的修改时间以确定是否

python 的模块一旦加载就会常驻内存,直到程序结束。再碰到 import 语句式只是修改名字空间,而不需要重新加载。这种机制是出于运行时的效率考虑,每遇到 import 的时候重新加载显然很低效。它也不会检查源文件的修改时间以确定是否重新加载,Python 有那么多的模块,每次调用时都检查一遍时间也是不行的。
这种机制下,开发长时间运行的守护程序就会很麻烦,修改源代码后要重新启动程序才能让新的代码生效。比如用 mod_python 做 WEB 开发,Apache 会启动多个守护进程来应答客户请求,里面有 python 的解释引擎和加载的模块,若要让修改后的代码生效只能重起 apache,这会影响到其它服务的正常运行,非常不方便。mod_python 有一个PythonAutoReload 参数,它只是针对 PythonHandler 而言的,能够对设定的 PythonHandler 实现自动重新加载,而该 Handler 中所用到的模块却不能自动 reload。
这种修改源代码然后重起 apache 的调试方式实在让我无法忍受了,决定实现一种自动重新加载机制。基本的思路就是每个用户请求到来时,检查我所关心的那些模块源文件的修改时间,如果比加载时的修改时间新,则重新加载。
编写一个检测时间和重新加载的函数,让它在每个请求到来时执行:
undefined view plain copy to clipboard print ?
  1. def  autoreload():   
  2.   mod_names = ['Entry','Index','SideBar']   
  3.    for  mod_name  in  mod_names:   
  4.      try :   
  5.       module =  sys .modules[ mod_name ]   
  6.      except :   
  7.        continue   
  8.     mtime =  os .path.getmtime( module.__file__ )   
  9.      try :   
  10.        if  mtime > module.loadtime:   
  11.          reload ( module )   
  12.      except :   
  13.      pass   
  14.     module.loadtime = mtime   
这段代码不长,但是改了好多个版本,最开始用 has_key() 的方式来检测是否存在某个模块,检测该模块是否有 loadtime 属性( 用 module.__dict__ ),现在这种方式应该效率高一些,曾经在一个 blog 上看到过对比测试数据。起初还在每个关心的模块里面加上一句loadtime = os.path.getmtime( __file__ ),这是不必要的,因为 Python 用的是动态类型,可以在运行时追加属性,第一次检测时设置初始状态即可。
有了这段代码,开发 BlogXP 方便多了,改了源码之后立马就能生效,而且它在正常运行时的消耗也很小。另外,由于mod_python 能够实现指定的 Handler 的自动重新加载,将这段代码放在该 Handler 中,可以方便地改变所关心的模块列表,也不需重起 apache。
欢迎批评指正:-)
from: [url]Http://blog.daviesliu.net/article/entry20050610-235635[/url]

--结束END--

本文标题: Python Module Auto R

本文链接: https://lsjlt.com/news/190773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python Module Auto R
    Python 的模块一旦加载就会常驻内存,直到程序结束。再碰到 import 语句式只是修改名字空间,而不需要重新加载。这种机制是出于运行时的效率考虑,每遇到 import 的时候重新加载显然很低效。它也不会检查源文件的修改时间以确定是否...
    99+
    2023-01-31
    Python Module Auto
  • python+selenium+auto
    在做web端ui层自动化的时候会碰到文件上传的操作,经常有朋友问到,这里总结一下第一种:type=file的上传文件,类似如下的使用类似这样的代码就可以完成:driver.find_element('name','file').send_k...
    99+
    2023-01-31
    python selenium auto
  • python onvif module
    opencvr在添加onvif接口的时候,会导致store那边异常挂掉,也不知道为啥。 于是,想着,是不是python有类似onvif的接口工具呢,可以执行一些小命令啥的,于是找到了onvif这个pyton的module。 apt...
    99+
    2023-01-31
    python onvif module
  • Python -- abc module
    今天,我们要讲的是python的ABC 模块 这个模块是用来定义一个抽象类。具体的概要介绍可以浏览PEP 3119。 register 首先注册一个abc的虚拟子类 from abc import ABCMeta  class MyAB...
    99+
    2023-01-31
    Python abc module
  • python module manage
    python模块     就是python的程序模块     顶层文件     模块文件1     模块文件2         可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块...
    99+
    2023-01-31
    python module manage
  • python module usage
    hello.py #!/usr/bin/python def hello():print "imported me,hello world"def login():print "I'm already login" test.py ----...
    99+
    2023-01-31
    python module usage
  • 解决AttributeError(f"module {__name__!r} has no attribute {name!r}")在django出现报错
    报错的原因这个错误是因为你试图访问一个模块中不存在的属性。具体原因可能有很多,但是最常见的原因是拼写错误或者引用了一个没有导入的模块。请确保你没有拼写错误,并且你需要的模块已经被正确导入。如果这些都没有问题,你也可以尝试调用 `dir()`...
    99+
    2024-02-28
    django django报错 python 错误处理 AttributeError
  • Python XML No module
    在学习使用Python解析XML的过程中,使用官方文档https://docs.python.org/2/library/xml.etree.elementtree.html中的例子进行测试,代码如下:import xml.etree.El...
    99+
    2023-01-31
    Python XML module
  • python 中的 module 和 package
    接着如何在python 中导入 package的分享,这一次是在 package 下继续嵌套一个 package , 项目目录如下: pkg1 ---__init...
    99+
    2024-04-02
  • 【Python】ModuleNotFoundError: No module named ‘jupyter_server.contents‘
    我在Pycharm上使用Jupyter Notebook的时候,发现无法正常使用,Jupyter Server无法正常拉起来。 具体的报错为: File "C:\Users\chgagnon\App...
    99+
    2023-10-18
    python jupyter Pycharm 原力计划
  • 关于Python的Type,Module
    关于Python的Type,Module,ClassPosted on 2007-07-13 by jeff 类在Python中只是一种数据类型.而任何东西都是对象应该是针对Type来说的,对象是Type的实例,而并不限于是类的实例.要知道...
    99+
    2023-01-31
    Python Type Module
  • python错误:No module n
    MySQL-python是Python访问MySQL数据库的第三方模块库;在安装过程中出现如下错误:[root@localhost MySQL-python-1.2.5]# python setup.py installTraceback ...
    99+
    2023-01-31
    错误 python module
  • python的module如何用
    在Python中,我们使用`import`语句来导入模块。一旦导入了一个模块,我们就可以使用模块中定义的函数、变量和类。下面是导入模...
    99+
    2023-08-23
    python module
  • Python version 2.7 r
    安装PIL的时候,不能再注册表中识别出来python2.7 在网上找了方法,仅作笔记,供下次使用   方法:   新建一个register.py 文件,把一下代码贴进去 import sys   from _winreg import * ...
    99+
    2023-01-31
    Python version
  • 关于Python中No module n
    1.执行代码时报错 错误信息:ModuleNotFoundError: No module named 'requests' 错误截图: 查看python版本命令如下: python -V 查看python版本命令截图如下:2.解决办法1 ...
    99+
    2023-01-31
    Python module
  • module怎么在python中使用
    今天就跟大家聊聊有关module怎么在python中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相...
    99+
    2023-06-14
  • Python 报错 ModuleNotFoundError: No module named ‘numpy‘
    创建新的工程,编译后提示错误:“ModuleNotFoundError: No module named 'numpy'” 打开dos窗口,输入:pip list 确认已安装numpy,如下图: 解决方案一:  打开PyCharm软件...
    99+
    2023-09-20
    python 开发语言
  • 【Python】AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘
    问题描述 树莓派ubuntu系统下python3执行报错如下: File "/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl...
    99+
    2023-08-31
    python ubuntu linux
  • Python AttributeError: module ‘distutils‘ has no attribute ‘version‘
    1, 问题 在安装或运行使用 PyTorch 的 Python 代码时,您可能会看到一个错误: AttributeError: module 'distutils' has no attribute ...
    99+
    2023-10-06
    python 开发语言
  • python怎么安装module模块
    要安装Python的模块(module),可以使用以下方法:1. 使用pip命令安装:pip是Python的包管理工具之一,可以用来...
    99+
    2023-10-12
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作