关闭/终止对象的Python式方法

2024-10-02 16:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Whoosh(文件索引器)writer对象

>>> a
<whoosh.filedb.filewriting.SegmentWriter object at 0x013DFE10>

因为whoosh不允许多个编写器并实现线程安全(AFAIK!!),我希望在该对象被使用后将其关闭。在

^{pr2}$

但它没有封闭的方法。我确信,所有成熟的python库对象都有内部函数,比如允许所有基本功能的-exit。关闭Python对象的正确方法是什么?还是取决于图书馆本身?我采用Python的“一种简单但显而易见的正确方法”的方法

这是dir(a)的粘贴:http://pastebin.com/Q5hceTr8


附言

我刚在前一天通过询问Confused about Python's with statement了解了with语句。这个问题是不同的,因为我需要一种处理全局对象的方法;这样我就可以在多次添加或删除之后进行提交。好像呼呼有搜索器。关闭()但不是索引器.close(),这似乎不一致


Tags: 文件对象方法objectwith线程atwriter
2条回答

I was assured that all mature python library objects have internal functions such as __ exit__ that allow all basic functionality.

它们是这样的,而且您的pastebin指示这样的-请看顶部的__exit__?在

这是一种用于实现以下功能的特殊方法。。。在

What is the right way of closing a Python object?

自动使用with块:

with some_api_call() as awesome_thing_from_api:
    use(awesome_thing_from_api)

如果它有__enter____exit__方法,这意味着它实现了context manager protocol,您应该这样使用它:

with constructor(args) as a:
    # do stuff with a
    pass
# here a is closed even if you had an error above

其中constructor要么是类本身,要么是用来创建它的任何工厂函数。在Python2.5中,您需要from __future__ import with_statement。在

相关问题 更多 >