У меня на диске четыре файла.Эти четыре файла в формате .npz
.Я написал starmap pool
многопроцессорную Python-программу, которая будет использовать 4 процессора, каждый из которых будет загружать данные из отдельных .npz
файлов в моем каталоге и возвращать данные в 4 списках.
Вот разбивка кода иЯ получаю желаемый результат с этим.Мой единственный вопрос - понять порядок, в котором этот результат получен.
save_list_in # A list which contains the address and names of the four .npz files to be
file_name_1 # A a sub-string which is to be found in the items of save_list_in
Теперь вот функция, которая должна выполняться параллельно.
def save (file_in, file_name_1, file_name_2):
sample_1_seq = []
sample_1_embed = []
sample_2_embed = []
sample_2_seq = []
if file_name_1+"_seq" in file_in:
np_load_old = np.load
np.load = lambda *a, **k: np_load_old(*a, allow_pickle=True, **k)
loaded_1 = np.load(file_in)
np.load = np_load_old
print(file_in+" "+str(len(loaded_1.f.arr_0)))
sample_1_seq=loaded_1.f.arr_0
if file_name_1 + "_vec" in file_in:
np_load_old = np.load
np.load = lambda *a, **k: np_load_old(*a, allow_pickle=True, **k)
loaded_2 = np.load(file_in)
np.load = np_load_old
print(file_in+" "+str(len(loaded_2.f.arr_0)))
sample_1_embed=loaded_2.f.arr_0
if file_name_2+"_seq" in file_in:
np_load_old = np.load
np.load = lambda *a, **k: np_load_old(*a, allow_pickle=True, **k)
loaded_3 = np.load(file_in)
np.load = np_load_old
print(file_in+" "+str(len(loaded_3.f.arr_0)))
sample_2_seq=loaded_3.f.arr_0
if file_name_2 + "_vec" in file_in:
np_load_old = np.load
np.load = lambda *a, **k: np_load_old(*a, allow_pickle=True, **k)
loaded_4 = np.load(file_in)
np.load = np_load_old
print(file_in+" "+str(len(loaded_4.f.arr_0)))
sample_2_embed=loaded_4.f.arr_0
return sample_1_seq, sample_1_embed, sample_2_seq, sample_2_embed
, и я использую следующий метод длявызовите вышеуказанную функцию.
pool = mp.Pool(4)
sample_1_seq, sample_1_embed, sample_2_seq, sample_2_embed =zip(*pool.starmap(save, [(file_in, file_name_1, file_name_2) for file_in in save_list_in]))
pool.close()
Результаты: Я получаю sample_1_seq, sample_1_embed, sample_2_seq, sample_2_embed
каждый длиной 4. Мои желаемые результаты в sample_1_embed[1], sample_1_seq[0], sample_2_embed[2], sample_2_seq[3]
.Мне интересно, почему я получаю свои результаты sample_1_embed[1]
вместо одного списка sample_1_embed
.
sample_1_embed[1] instead of sample_1_embed
sample_1_seq[0] instead of sample_1_seq
sample_2_embed[2] instead of sample_2_embed
sample_2_seq[3] instead of sample_2_seq
Кроме того, как этот порядок индексов списков присваивается ему?Например,
sample_1_embed[1] instead of sample_1_embed[0] or sample_1_embed[2] or sample_1_embed[3]
sample_1_seq[0] instead of sample_1_seq[1] or sample_1_seq[2] or sample_1_seq[3]
sample_2_embed[2] instead of sample_2_embed[1] or sample_2_embed[1] or sample_2_embed[3]
sample_2_seq[3] instead of sample_2_seq[0] or sample_2_seq[1] or sample_2_seq[2]