以下代码片段:
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有一个用于打开文件的缓存机制.也许这就是问题所在?
发布于 2014-02-05 17:01:26
有关参考资料,请参阅熊猫文档
只需发布PyTables 3.1 发布说明
这应该适用于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()我不知道这会对线程安全有什么影响。
https://stackoverflow.com/questions/21583113
复制相似问题