使用 TCL 释放 Python 库

问题描述 投票:0回答:1

在 Python 中,我加载一个库 (pyd)。但我需要在第二次调用之前卸载它。 在 Python 中,我通过以下方式完成此操作:

import ctypes, _ctypes

dll = ctypes.CDLL('path_to_file')
try:
    _ctypes.FreeLibrary(dll._handle)
    _ctypes.FreeLibrary(dll._handle)
except:
    pass

我知道 FREE_LIBRARY 是 twapi 的一部分,但如何在 TCL 中执行此操作?

我不是 TCL 专家,所以任何帮助都会很棒。

python tcl
1个回答
0
投票

Tcl 有一个内置命令

unload
,它可以撤消
load
所做的操作并从进程中删除库。它很少使用,因为它仅在特定库定义回调函数以将其自身与进程分离(删除它创建的命令等)时启用,并且编写这些函数非常棘手。如果没有这个故意的解开步骤,您就会在不同的地方得到悬空的代码指针和数据指针,并且可能会发生崩溃。几乎所有的扩展库都懒得支持它;支持它的人可能应该记录这一点,因为这是一种罕见的功能。

注意Tcl不支持在脚本层加载和卸载任意库。除了 C 语言之外,还有一些支持,但这主要是为了库可以加载其内部非 Tcl 依赖项。 (例如,它由 ODBC 驱动程序使用。)


Tcl 库本身

可卸载的,尽管不能从 Tcl 本身卸载。如果您要这样做,则需要在这样做之前致电Tcl_Finalize()

;关闭进程全局系统,如 IO 缓冲区、文件系统缓存、内存管理引擎核心和多个工作线程。首先删除您打开的所有解释器可能是个好主意。

该 API 并不常用,但有时在查找内存分配错误时使用,否则无限期保留的内容可能看起来像泄漏(它们不是,只是变化不大)。

© www.soinside.com 2019 - 2024. All rights reserved.