Я хочу применить многопроцессорный модуль для ускорения обновления элементов массива.
Вот код WIP ...
counter = Value(c_int) # defaults to 0
# counter_lock = Lock()
def increment():
with counter.get_lock():
counter.value += 1
print(f'\r{counter.value}/{total} has been completed.', end='')
total = len(data_paths)
# Assign number to the data
data_w_num=list(enumerate(data_paths))
def prepare_data(data_w_num):
i, imgs = data_w_num
try:
with data.get_lock():
data[i] = np.array([preprocess(read_img(imgs[m]), input_shape[1:]) for m in ['t1', 't2', 't1ce', 'flair']], dtype=np.float32)
with data.get_lock():
labels[i] = preprocess_label(read_img(imgs['seg']), input_shape[1:])[None, ...]
# Print the progress bar
increment()
except Exception as e:
print(f'Something went wrong with {imgs["t1"]}, skipping...\n Exception:\n{str(e)}')
return
with Pool(cpu_count()) as p:
print('total: ' + f'{total}')
r = p.map_async(prepare_data, data_w_num)
print("Processing...")
r.wait()
print('\nAll processes were done.')
Переменная data_paths выглядит следующим образом:
Но это не работает. Сообщение об ошибке было «только массивы размера 1 могут быть преобразованы в скаляры Python». И я не уверен, как применить многопроцессорность.
Я был бы рад, если бы вы помогли мне решить эту проблему.