我使用h5py處理多個線程的數組:不能從一個線程訪問HDF5陣列
def process(start, end, dataset):
for i in xrange(start, end):
# Do something with dataset[i]
f = h5py.File(path, 'r')
dataset = f[...]
worker = [threading.Thread(target=process, args=(start, end, dataset)) \
for start, end in ...]
從線程訪問數組時,我得到一個錯誤
File "/usr/lib/python2.7/dist-packages/h5py/_hl/dataset.py", line 367, in __getitem__
if self._local.astype is not None:
AttributeError: 'thread._local' object has no attribute 'astype'
我也實在沒有線索爲什麼發生這種情況:/,我可以訪問dtype
和shape
,但是在訪問任何分片時,我都會收到此錯誤。
編輯:
調用
process(0, len(dataset), dataset)
在主線程中按預期工作。
我正在使用一個大數據集,計算數據集中每幀圖像配準的相位相關性。這需要一些計算時間。因此I/O操作可以是順序的。我只需要處理內存中的一些分塊部分。 上述代碼在我的設置中不起作用,奇怪的是,我可以使用函數'read_direct'並且一切正常。寫入數據集也可以在線程中完成(Ofc將所有內容鎖定爲順序)。所以我猜''read_direct'和'__get_item__'之間有一些不同的行爲? – user1447257
全局解釋器鎖只在I/O上?讀/寫之後,釋放鎖並且線程再次並行運行? – user1447257
你可能想從h5py的主要作者購買這本書: http://shop.oreilly.com/product/0636920030249.do – weatherfrog