Python 模块动态加载技术
C 语言中可以使用 dlopen,dlsym 和 dlclose 让程序在运行过程中按需加载和卸载动态库。Python 也支持这种方式,使用模块动态加载技术,我们可以把程序的配置文件写成可运行的 python 程序,在程序运行过程中可以动态去更新配置。当然也可以将 python 脚本作为业务逻辑加载到正在运行的主程序中,而不用重启服务。
作者在个人项目 pyed 中使用了这种技术,本文对个人研究和使用这种技术的一个总结。如有问题,欢迎大家讨论。
在 Python 中执行代码
python 提供了 exec 用于在程序中执行一段 python 代码,官方说明:
exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]
该语句可以使用 exec() 函数进行替代。来看一个简单的例子:
>>> exec "print('Hello World')"
Hello World
>>>
这种使用方式,在程序中其实作用不大,我们使用动态加载,一般是希望将一个模块中的某个变量或函数按需引入到正在执行的程序中,而不仅仅是去执行一下,打印一句 “Hello World”,exec 中的 in 解决了这个问题。
in 的作用是将执行代码中的变量,函数或者类放入到一个字典中,这里再来看一个例子: