У меня есть 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)
но кажется, во-первых, что это не привело к ускорению обработки данных, во-вторых, я не смог » Я не понимаю, что не так с результатами.
Я был бы очень рад, если бы вы дали какой-нибудь совет / мнение.