加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 关闭/终止对象的Pythonic方式

发布时间:2020-12-15 04:55:24 所属栏目:Java 来源:网络整理
导读:我有一个Whoosh(文件索引器)编写器对象 awhoosh.filedb.filewriting.SegmentWriter object at 0x013DFE10 由于whoosh不允许多个编写者并实现线程安全(AFAIK !!),我想在使用它时关闭该对象. a.is_closedFalse 但它没有密切的方法.我确信所有成熟的python库对
我有一个Whoosh(文件索引器)编写器对象

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

由于whoosh不允许多个编写者并实现线程安全(AFAIK !!),我想在使用它时关闭该对象.

>>> a.is_closed
False

但它没有密切的方法.我确信所有成熟的python库对象都有内部函数,例如__ exit__,它们允许所有基本功能.关闭Python对象的正确方法是什么?或者它取决于图书馆本身?我以它的字面形式采用Python的“单一但显而易见的正确方法”方式

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

后记

我刚刚在Confused about Python’s with statement询问前一天才刚刚了解了with声明.这个问题很明显,因为我需要一种处理全局对象的方法;这样我可以在多次添加或删除后进行提交.好像whoosh有一个searcher.close()而不是一个indexer.close(),这似乎不一致

解决方法

如果它有__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

构造函数是类本身或用于创建它的任何工厂函数.在Python 2.5中,您需要从__future__导入with_statement.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读