Узкое место в производительности вашего сценария, скорее всего, связано с тем, что он записывает в 3 файла одновременно, что приводит к массовой фрагментации между файлами и, следовательно, к большим накладным расходам.
Таким образом, вместо того, чтобы записывать в 3 файла одновременно с чтением строк, вы можете буферизовать миллион строк (что должно занимать менее 1 ГБ памяти), прежде чем записать 3 миллиона слов в выходные файлы. один файл за раз, так что это приведет к гораздо меньшей фрагментации файла:
def write_words(words, *files):
for i, file in enumerate(files):
for word in words:
file.write(word[i] + '\n')
words = []
with open('input.txt', 'r') as f, open('words1.txt', 'w') as out1, open('words2.txt', 'w') as out2, open('words3.txt', 'w') as out3:
for count, line in enumerate(f, 1):
words.append(line.rstrip().split(','))
if count % 1000000 == 0:
write_words(words, out1, out2, out3)
words = []
write_words(words, out1, out2, out3)