我在Mercurial中有一个Python应用程序。在应用程序中,我发现需要显示其当前正在从哪个提交运行。到目前为止,我发现的最佳解决方案是使用hglib。我有一个看起来像这样的模块:

def _get_version():
    import hglib
    repo = hglib.open()
    [p] = repo.parents()
    return p[1]

version = _get_version()


它使用hglib查找使用的版本,并将结果存储在变量中,我可以在服务保持运行的整个过程中使用该变量。

我现在的问题是,这会导致hg子进程正在运行,这对我来说是无用的,因为一旦完成该模块的初始化,我就不再需要使用hglib了。

我希望一旦对存储库实例的引用超出范围,子进程将在垃圾回收期间关闭。但这显然不是它的工作原理。

在阅读hglib文档时,我没有找到有关如何关闭子进程的任何文档。

完成对hg子进程的关闭后,首选的方法是什么?

最佳答案

您需要像对待文件一样对待仓库。完成后调用repo.close()或在with中使用它:

def _get_version():
    import hglib
    with hglib.open() as repo:
        [p] = repo.parents()
    return p[1]

version = _get_version()

09-04 17:32