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

2024-06-26 00:15:51 发布

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

以下代码片段:

    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请求执行,因此它可能同时在多个线程上执行。也有可能在商店关闭被称为。在

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

什么是使此代码线程安全并确保文件在发生异常时正确关闭的正确方法?在

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


Tags: 文件store代码iolockpandasdatamy
1条回答
网友
1楼 · 发布于 2024-06-26 00:15:51

有关参考,请参见pandasdocs

只需发布PyTables 3.1release notes

这应该在PyTables 3.0.0上有效。只要不在其他地方写入该文件(如果该文件已经存在)。在

您也可以尝试这样做:

with get_store('my_datafile.hdf',mode='r') as store:
    return store['my_series']

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

如果你只是在阅读,那么你根本不在乎线程安全。在任何情况下都不要试图在多个线程(甚至进程)中写入。这会毁了你的档案。在

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

^{pr2}$

我不知道这会对线程安全性产生什么影响。在

相关问题 更多 >