Python 3.6 Поток для чтения большого файла hdf5 - PullRequest
0 голосов
/ 02 августа 2020

У меня есть Python скрипт для параллельного чтения файла hdf5, он содержит 111232 изображения с интенсивностью, и каждое изображение имеет форму (16, 512, 128). Основная проблема заключается в том, чтобы вычислить сумму значений целостности всех изображений для дальнейшего усреднения по количеству изображений и попытаться сделать это очень быстро. Я новичок ie с многопоточностью, но попробую сделать что-то вроде этого:

#!/usr/bin/env python3
# coding: utf8

import h5py as h5
from itertools import repeat
import threading
import numpy as np

chunk_size = 10000

lock = threading.RLock() # create a lock


def _read_chunk_at(index, data_file):
    global lock
    global intensity

    print(threading.currentThread().getName() + '\n')
    data = data_file[index : index + chunk_size]
    
    with lock:
        intensity += np.sum(data, axis=0)


def main(filename, label):
    global intensity

    h_file = h5.File(filename, 'r')
    data_file = h_file[label]
    length = len(data_file)

    args_iter = range(0, length, chunk_size) # array of index for each chunk
    
    threads = list()

    for index in args_iter:
        # creating threads
        thread = threading.Thread(target=_read_chunk_at, args=(index, data_file))
        threads.append(thread)
        # start threads
        thread.start()


    for index, thread in enumerate(threads):
        # wait until threads complete
        thread.join()
        print("Main    : thread {} done".format(index))

    h_file.close()


if __name__ == "__main__":
    filename = 'test_file.cxi' # (111232, 16, 512, 128)
    label = '/data/data'


    h_file = h5.File(filename, 'r')
    data_file_shape = h_file[label].shape
    h_file.close()

    intensity = np.zeros(data_file_shape[1:])
    
    main(filename, label)

но кажется, во-первых, что это не привело к ускорению обработки данных, во-вторых, я не смог » Я не понимаю, что не так с результатами.

Я был бы очень рад, если бы вы дали какой-нибудь совет / мнение.

...