我有一个长期运行的Python服务器,并希望能够在不重新启动服务器的情况下升级服务.这样做的最佳方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
Run Code Online (Sandbox Code Playgroud) 我有一个 foo.py
def foo():
print "test"
Run Code Online (Sandbox Code Playgroud)
在IPython中我使用:
In [6]: import foo
In [7]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
然后我改为foo():
def foo():
print "test changed"
Run Code Online (Sandbox Code Playgroud)
在IPython中,调用的结果仍然是test:
In [10]: import foo
In [11]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
然后我用:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
我删除了foo.pyc相同的文件夹foo.py存在,但仍然没有运气.
我可以知道如何在运行时重新导入更新的代码吗?
我有一个 python 程序,我需要在其中加载和反序列化 1GB 的 pickle 文件。这需要 20 秒,我想要一种机制,可以随时使用泡菜的内容。我看过shared_memory但它的所有使用示例似乎都涉及 numpy 而我的项目不使用 numpy。使用shared_memory或以其他方式实现这一目标的最简单和最干净的方法是什么?
这就是我现在加载数据的方式(每次运行):
def load_pickle(pickle_name):
return pickle.load(open(DATA_ROOT + pickle_name, 'rb'))
Run Code Online (Sandbox Code Playgroud)
我希望能够在两次运行之间编辑模拟代码而无需重新加载泡菜。我一直在搞乱,importlib.reload但对于包含许多文件的大型 Python 程序来说,它似乎真的不太好用:
def main():
data_manager.load_data()
run_simulation()
while True:
try:
importlib.reload(simulation)
run_simulation()
except:
print(traceback.format_exc())
print('Press enter to re-run main.py, CTRL-C to exit')
sys.stdin.readline()
Run Code Online (Sandbox Code Playgroud) 如何在此测试模块(MUT)中进行修补和模拟 getLogger:
# Start of the module under test
import logging
log = logging.getLogger('some_logger')
# ...
Run Code Online (Sandbox Code Playgroud)
我想要做:
mock_logging.getLogger.return_value = Mock()
Run Code Online (Sandbox Code Playgroud)
但是我mock_logging在导入MUT之前无法创建,但是导入MUT已经调用了getLogger...
我有以下文件夹结构
project/
src/
__init__.py
mymodule.py
mynotebook.ipynb
Run Code Online (Sandbox Code Playgroud)
在mynotebook我可以mymodule使用标准公式导入from src.mymodule import *。在mymodule不停止内核的情况下修改并尝试重新导入它时会弹出问题。我正在关注此讨论,但它不起作用。(蟒蛇版本:3.3.5)
from imp import reload
reload(src.mymodule) # also reload(mymodule)
Run Code Online (Sandbox Code Playgroud)
上面的代码失败并显示消息name 'src' is not defined(也name 'mymodule' is not defined)。我不能使用ipython'sautoreload因为我没有安装它的权限。
谢谢!