Используйте outcomes после выполнения Pool, попробуйте так:
from itertools import repeat
from multiprocessing import Pool, Manager
def reader(entry, outcomes):
# ...
prediction = min(distances) + (mlc_data[min(distances)[1]],)
outcomes[entry_pairs[' '.join(entry)]] = prediction
manager = Manager()
outcomes = manager.dict()
with Pool(3) as p:
# Обрабатываем каждый элемент из input[0] и сохраняем результаты в outcomes:
p.starmap(reader, zip(input[0], repeat(outcomes)))
p.close()
p.join()
print(outcomes) # должен содержать все элементы