首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HDFStore文件的线程和异常安全方法

使用HDFStore文件的线程和异常安全方法
EN

Stack Overflow用户
提问于 2014-02-05 16:39:30
回答 1查看 2.4K关注 0票数 1

以下代码片段:

代码语言:javascript
复制
    HDFStore = pandas.io.pytables.HDFStore
    lock = threading.RLock()
    with lock:
        store = HDFStore('my_datafile.hdf','r')
        data_frame = store['my_series']
        store.close()
    return data_frame['my_column']

是响应web请求执行的,因此它可能同时在多个线程上执行。还可能在调用store.close之前中断执行。

我遇到了一些问题( HDFStore库中的异常,或返回的空数据),它们都是不可复制的。

怎样才能使这个代码线程安全,并确保文件在异常情况下被正确关闭?

通过一些调查,我发现HDFStore有一个用于打开文件的缓存机制.也许这就是问题所在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-05 17:01:26

有关参考资料,请参阅熊猫文档

只需发布PyTables 3.1 发布说明

这应该适用于PyTables 3.0.0。只要您是,而不是在其他地方写入文件,(既然它已经存在)。

您也可以尝试这样做:

代码语言:javascript
复制
with get_store('my_datafile.hdf',mode='r') as store:
    return store['my_series']

这将自动关闭它为你(我不认为这是线程安全的说,但也许如果你把它放在你的with lock:,它将是线程安全的。

如果您是只阅读,那么您根本不关心线程安全。在任何情况下都不会尝试用多个线程(甚至进程)编写。这会毁了你的档案。

PyTables 3.1刚刚发布,它改变了文件缓存机制,至少在较低的HDF5版本上是这样的,要查看您的版本:

代码语言:javascript
复制
import tables
tables.get_hdf_version()

我不知道这会对线程安全有什么影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21583113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档