В питоне используется Global Interpreter Lock, и поэтому там нет эффективной параллельной многопоточности.
Питонячую многопоточность можно использовать только для организации всяких контролирующих потоков.
Для распараллеливания нужно использовать multiprocessing.
Чтение из файла не распараллеливается (по крайне мере, на одной машине, а на разных не будет потоков), так как файл не является данным со случайным доступом.
Раскидывание чтения между потоками приводит в питоне к квадратичному алгоритму, вместо линейного. Отсюда и замедление.
Я бы порекомендовал выбрать более разумную задачу для распараллеливания. И дальше начать с разбора примера
import multiprocessing
def proc(a):
<…>
return something
pool = multiprocessing.Pool(3) # ну может 4.
result = pool.map(proc, list(range(100)))