Python multiprocessing 打日志

一定要打日志。

新手写代码不喜欢打日志,觉得日志配置起来麻烦,又没什么用,所以懒得打日志。配置其实确实挺麻烦的,但是不经历一次联调的时候出了错不知道去哪里找头绪的情况你是不会知道打日志是有多么重要的。反正这次的项目在开启之前,我就打定主意一定要打日志,于是我就打算用 Python 自带的 logging 库来搞定日志。

Continue reading “Python multiprocessing 打日志”

在 Python 中重新载入模块

在 Python 中重载模块可以用 importlib.reload 方法。

这是一个系统提供的方法,可以保证模块被重载,也就是说,如果你直接 import module_name ,那么你在用的时候会发现这个模块依然是之前的那个,并没有被重新载入。这个方法在使用 Python 编写插件系统的时候特别有用。有时候插件被修改了,那么就需要把这个修改之后的插件重新作为一个模块读入内存。

可以通过查看 sys.modules 来获取内存中已经读入的模块。这是一个字典,key 是模块名字,value 是模块本身。如果你 del sys.modules['module_name'] 的话,其实模块并没有从内存里 unload 出去。这时候你调用模块里的东西依然没问题,说明这只是指向模块的其中一个引用,还有其他的引用在指向这个模块。但是如果你这时候 import module_name,你会发现这个模块被重载了!至于完全从内存中移除模块的方法,我在网上没有找到,如果有时间,我会去读一读源码看看这个问题的答案。如果有大神知道答案,希望能在评论区指点一下。

如果你 del module_name,会使得模块无法被调用。但是这时候你 import module_name,会发现这个模块并没有被重新载入,可以用是可以用了,但是在内存里的依然是之前那个模块。这是一个坑,一定要注意。