У меня есть некоторый последовательный код, подобный этому, который вычисляет совпадения слов, то есть подсчитывает парные слова.Следующая программа работает, за исключением того, что список предложений составлен для иллюстративных целей.
import sys
from collections import defaultdict
GLOBAL_CONCORDANCE = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: [])))
def BuildConcordance(sentences):
global GLOBAL_CONCORDANCE
for sentenceIndex, sentence in enumerate(sentences):
words = [word for word in sentence.split()]
for index, word in enumerate(words):
for i, collocate in enumerate(words[index:len(words)]):
GLOBAL_CONCORDANCE[word][collocate][i].append(sentenceIndex)
def main():
sentences = ["Sentence 1", "Sentence 2", "Sentence 3", "Sentence 4"]
BuildConcordance(sentences)
print GLOBAL_CONCORDANCE
if __name__ == "__main__":
main()
Для меня первый цикл for можно распараллелить, потому что вычисляемые числа являются независимыми.Однако изменяемая структура данных является глобальной.
Я пытался использовать модуль Python Pool
, но у меня возникли некоторые проблемы с травлением, которые заставляют меня задуматься, использую ли я правильный шаблон проектирования.Может кто-нибудь предложить хороший способ распараллеливания этого кода?