无聊测试了下,发现:
1.python只import模块一次,在import某个模块后就存在内存中,此时修改该模块没有用
2.python3提供 importlib模块,reload方法重新载入模块.
3.但是该reload方法有延迟,似乎并不会等reload完毕,直接会继续执行
4.在reload后加延迟,起到预期效果,两个py互相调用和修改
test2.py:
import test1
import importlib
import time
def modify(ii):
with open('test1.py','r') as f_r:
lines = f_r.readlines()
with open('test1.py','w') as f_w:
i = 1
for line in lines:
if i == 19:
num = int(line)+ii
line = '\t\t'+str(num)+'\n'
i = i+1
f_w.write(line)
def f2():
i2= \
1
print('i2 =',i2)
modify(i2)
importlib.reload(test1)
time.sleep(0.2)
if i2<10000:
test1.f1()
if __name__=='__main__':
f2()
print("test2 end")
test1.py:
import test2
import importlib
import time
def modify(ii):
with open('test2.py','r') as f_r:
lines = f_r.readlines()
with open('test2.py','w') as f_w:
i = 1
for line in lines:
if i == 19:
num = int(line)+ii
line = '\t\t'+str(num)+'\n'
i = i+1
f_w.write(line)
def f1():
i1= \
2
print('i1 =',i1)
modify(i1)
importlib.reload(test2)
time.sleep(0.2)
if i1<10000:
test2.f2()
if __name__=='__main__':
f1()
print("test1 end")
无聊测试了下,发现:1.python只import模块一次,在import某个模块后就存在内存中,此时修改该模块没有用2.python3提供 importlib模块,reload方法重新载入模块.3.但是该reload方法有延迟,似乎并不会等reload完毕,直接会继续执行4.在reload后加延迟,起到预期效果,两个py互相调用和修改test2.py:import tes...
项目开发完成后有一个需求:需要动态
修改
项目的配置文件。动态是什么意思?你可以认为我们的项目是一直处于
运行
状态,项目
运行
依赖某个配置文件,我们的目标是:在不影响项目正常
运行
的情况下,对配置文件进行
修改
,且
修改
后项目使用的是新配置文件。
保持项目一直
运行
用 while True 来模拟,我们要解决的问题可以拆分为两个:
修改
配置文件而不影响项目
运行
让项目能够加载到新的配置文件
配置文件的格式不同,解决方案不同,在
Python
中
比较推荐的配置文件格式是:YAML 和 PY。
Python
语言
reload
()函数重新载入
模块
SoHo 2019.04.02
对于一个大型脚本语言而言,通常需要将其功能细化。将实现不同功能的
代码
写在不同的脚本
中
,这样方便在其他脚本需要使用此功能时可以以
模块
的形式导入。极大地方便了脚本的维护和重用。
导入
模块
的方法
浅析重新载入
模块
之前先简单了解一下
python
导入
模块
的机制。
导入
模块
或
模块
中
的函数通常有三种方法:
1.
import
模块
...
sys.setdefaultencoding(‘utf8’)
运行
后显示“
reload
is not defined”
原来是
python
2和
python
3的用法不一样;
这是
python
2的用法;
python
3 可以用:
import
import
lib
import
sys
import
lib
.
reload
(sys)
在
python
中
使用
import
命令来带入自己编写的
python
模块
。
在调试过程
中
,如果
修改
了此
模块
,则必须使用
reload
() 函数重新载入该
模块
。
假设我们当前工作目录下面有一个名为function.editing的文件,其内容为:
导入
模块
,并且
运行
say_hello()函数:
把function.editing文件改为如下的内容并且保存:
此时如果仍旧调用say_hello()函...
reload
()是
python
2 的内置函数可以直接使用,但是
python
3 直接使用此函数报错,需要导入
import
lib
模块
from
import
lib
import
reload
转载于:https://www.cnblogs.com/haidongdong/p/9599594.html...
reload
()函数将以前导入过的
模块
再加载一次。重新加载(
reload
)包括最初导入
模块
时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的
Python
模块
。
若干注意事项:
1. 如果
模块
在语法上是正确的,但在初始化过程
中
失败,则导入过程不能正确地将
模块
的名字绑定到符号表
中
。这时,必须在
模块
能被重新加载之前使用
import
()函数加载该
模块
。
2. 重新加载
`
import
lib
.
import
_module` 是
Python
的内置
模块
`
import
lib
`
中
的函数。它用于动态地导入其他
模块
。通过提供
模块
的名称作为参数,你可以使用 `
import
lib
.
import
_module` 导入
模块
并将其赋值给一个变量。
例如,你可以使用以下
代码
导入 `math`
模块
:
```
python
import
import
lib
math_module =
import
lib
.
import
_module('math')
这将导入 `math`
模块
并将其赋值给变量 `math_module`。
请注意,`
import
lib
.
import
_module` 函数在
运行
时动态地导入
模块
,与常规的 `
import
` 语句不同。因此,在使用 `
import
lib
.
import
_module` 导入
模块
之前,请确保已经安装了相应的
模块
。