reload 内置函数对于重新初始化模块很有用,但在该函数的文档中(http://docs.python.org/2/library/functions.html#reload),你会发现:“除了 sys, main和builtin之外,重新加载内置或动态加载的模块通常不是很有用,但这是合法的。然而,在许多情况下,扩展模块不会被设计为多次初始化,并且可能会以任意方式失败重新加载时。” 换句话说,它可能无法解决您的问题。
但是,如果您能够将对第三方模块的调用移动到子进程中,则很容易确保每次都重新加载它,因为您现在通过在单独的进程中执行脚本来使用该模块。只需创建一个单独的 py 文件,例如 do_something.py,您可以在其中完成您需要对子进程执行的所有操作。然后您可以使用以下命令运行此文件:
p = subprocess.Popen(
[sys.executable, 'do_something.py', arg1, arg2 ...],
stdout=subprocess.PIPE
)
其中 'arg1, arg2, ...' 表示您可能需要传递给子进程的参数。如果您需要读取 C++ 模块的输出,您可以在 do_something.py 中打印它并在您的应用程序中使用:
p.stdout.read()
我承认这不是一个特别顺利的解决方案,但我认为它应该可以工作。