如何解决如果磁盘上的文件发生更改,我如何重新加载 python 类?
为了支持存储在源类文件中的参数的运行时更改并用作带有字段的对象,我如何检查自运行时启动或自上次重新加载以来对象的源文件是否被修改,并重新加载类并创建对象的新实例?
解决方法
这个方法似乎有效:
def reload_class_if_modified(obj:object,every:int=1)->object:
"""
Reloads an object if the source file was modified since runtime started or since last reloaded
:param obj: the original object
:param every: only check every this many times we are invoked
:returns: the original object if classpath file has not been modified
since startup or last reload time,otherwise the reloaded object
"""
reload_class_if_modified.counter+=1
if reload_class_if_modified.counter>1 and reload_class_if_modified.counter%every!=0:
return obj
try:
module=inspect.getmodule(obj)
cp=Path(module.__file__)
mtime=cp.stat().st_mtime
classname=type(obj).__name__
if (mtime>reload_class_if_modified.start_time and (not (classname in reload_class_if_modified.dict))) \
or ((classname in reload_class_if_modified.dict) and mtime>reload_class_if_modified.dict[classname]):
importlib.reload(module)
class_ =getattr(module,classname)
o=class_()
reload_class_if_modified.dict[classname]=mtime
return o
else:
return obj
except Exception as e:
logger.error(f'could not reload {obj}: got exception {e}')
return obj
reload_class_if_modified.dict=dict()
reload_class_if_modified.start_time=time()
reload_class_if_modified.counter=0
像这样使用它:
import neural_mpc_settings
from time import sleep as sleep
g=neural_mpc_settings()
while True:
g=reload_class_if_modified(g,every=10)
print(g.MIN_SPEED_MPS,end='\r')
sleep(.1)
neural_mpc_settings 在哪里
class neural_mpc_settings():
MIN_SPEED_MPS = 5.0
当我更改磁盘上的 neural_mpc_settings.py 时, 类被重新加载,新对象 返回反映了新的类字段。
,您可能需要考虑使用像 watchdog 这样的库,它可以让您在文件更改时触发处理程序。您可以将参数与代码搭配使用,而不是将它们存储在数据文件中,使用数据加载器方法在启动时和基础数据文件发生更改时调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。