相关疑难解决方法(0)

如何卸载(重新加载)Python模块?

我有一个长期运行的Python服务器,并希望能够在不重新启动服务器的情况下升级服务.这样做的最佳方法是什么?

if foo.py has changed:
    unimport foo  <-- How do I do this?
    import foo
    myfoo = foo.Foo()
Run Code Online (Sandbox Code Playgroud)

python module reload python-import

759
推荐指数
15
解决办法
59万
查看次数

在Python中卸载模块

TL/DR:

import gc, sys

print len(gc.get_objects()) # 4073 objects in memory

# Attempt to unload the module

import httplib
del sys.modules["httplib"]
httplib = None

gc.collect()
print len(gc.get_objects()) # 6745 objects in memory
Run Code Online (Sandbox Code Playgroud)

更新 我已经与Python开发人员联系了这个问题,事实上,"未来五年" 无法完全卸载模块.(见链接)

请接受Python确实不支持在2.x中卸载严重,基本,不可克服的技术问题的模块.


在我最近在我的应用程序中搜索memleak期间,我将其缩小到模块,即我无法收集卸载的模块.使用下面列出的任何方法卸载模块会在内存中留下数千个对象.换句话说 - 我无法在Python中卸载模块...

剩下的问题是尝试以某种方式垃圾收集模块.

我们试试吧:

import gc
import sys

sm = sys.modules.copy()  # httplib, which we'll try to unload isn't yet 
                         # in sys.modules, so, this isn't the source of problem

print len(gc.get_objects()) # 4074 objects in …
Run Code Online (Sandbox Code Playgroud)

python memory-leaks

53
推荐指数
4
解决办法
2万
查看次数

在Python 3.x中卸载模块

对我来说很明显,Python 2中没有干净的解决方案来卸载模块,这是一个已知的错误,已被纠正。

帖子:

如何卸载(重新加载)Python模块? 删除导入的python模块

2009年和2010年的报告证实了缺少对模块卸载的支持。

我想知道这是否在Python 3.x中得到了解决。当我这样做,import osdel osdir(),该os模块是不存在(至少不可见,可用)。没了吗

python python-3.x

5
推荐指数
1
解决办法
6726
查看次数