gpt4 book ai didi

python - 使用 HDFStore 文件的线程和异常安全方式

转载 作者:行者123 更新时间:2023-12-01 05:24:53 25 4
gpt4 key购买 nike

以下代码片段:

    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 对打开的文件有一个缓存机制......也许这可能是问题所在?

最佳答案

引用,参见pandas docs

并刚刚发布 PyTables 3.1 release 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 版本上更改了文件缓存机制,请查看您的版本:

import tables
tables.get_hdf_version()

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

关于python - 使用 HDFStore 文件的线程和异常安全方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com