В вашей функции вы можете решить распараллелить, разделив текст на части, применив токенизацию к частям, а затем объедините результаты.
Что-то в этом роде:
text0 = text[:len(text)/2]
text1 = text[len(text)/2:]
Затем примените свою обработку к этим двум частям, используя:
# here, I suppose that clean_preprocess is the sequential version,
# and we manage the pool outside of it
with Pool(2) as p:
words0, words1 = pool.map(clean_preprocess, [text0, text1])
words = words1 + words2
# or continue with words0 words1 to save the cost of joining the lists
Однако ваша функция кажется связанной с памятью, поэтомуон не будет иметь ужасного ускорения (обычно фактор 2 - это максимум, на который мы можем надеяться в наши дни на стандартных компьютерах), см., например, Насколько распараллеливание помогает производительности, если программа ограничена памятью? или Что означают термины «привязка к процессору» и «привязка к вводу / выводу»?
Таким образом, вы можете попытаться разбить текст более чем на 2 части, но, возможно, не получится быстрее,Вы можете даже получить разочаровывающую производительность, потому что разделение текста может быть более дорогим, чем его обработка.