2011-08-02 85 views
3

我有一個嗖(文件索引)作家對象Python的方式終止對象

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

隨着嗖犯規讓多發的作家和執行線程安全(據我所知!),我想接近該對象已被使用。

>>> a.is_closed 
False 

但它沒有密切的方法。我確信,所有成熟的Python庫對象都具有內部函數,如__ exit__,它允許所有基本功能。什麼是關閉Python對象的正確方法?還是取決於圖書館本身?我把「一個單一的,而是明顯的方式做正確」,在它的文字形式

這裏的目錄(一)的糊狀的Python的方式:http://pastebin.com/Q5hceTr8


後記

我剛剛在前一天通過詢問Confused about Python's with statement瞭解了有關聲明。這個問題是不同的,因爲我需要一種方法來處理一個全局對象;這樣我可以在多次添加或刪除後進行提交。好像嗖具有searcher.close(),但不是indexer.close(),這似乎不一致

回答

7

如果有__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或者是類本身,或者是用來創建它的任何工廠函數。在Python 2.5中,您需要from __future__ import with_statement

5

我確信所有成熟的python庫對象都具有內部函數,如__ exit__,它允許所有基本功能。

他們這樣做,你的pastebin表明這樣 - 請參閱頂部的__exit__

這是使用一種特殊的方法來實現以下...

什麼是關閉Python對象的正確方法嗎?

自動,使用與塊:

with some_api_call() as awesome_thing_from_api: 
    use(awesome_thing_from_api) 
+0

希望我能接受兩個答案 – aitchnyu

+0

哈哈有人一個人誰的名字,並認爲有關編程術語像我 –