использование итератора в многопоточном пуле - PullRequest
0 голосов
/ 05 января 2019

Я хочу использовать многопоточность для повышения эффективности работы с итератором при записи в текстовый файл.

Здесь показано решение, которое не использует многопоточность:

import itertools
Dictionary_file = open("C:\\Users\\user\\Desktop\\\Dictionary.txt", 'r')
File_of_combinations = open("C:\\Users\\user\\Desktop\\File_of_combinations", 'w')
dictionary = []
for word in Dictionary_file:
    dictionary.append(word.strip())


for x in (itertools.permutations(dictionary, r=3)):
    File2.write(' '.join(x) + '\n')
File2.close()

(берет файл словаря .txt и записывает каждую комбинацию из трех слов в другой файл .txt)

from multiprocessing import Pool
import itertools
Dictionary = open("C:\\Users\\user\\Desktop\\Dictionary.txt", 'r')
File_of_combinations = 
open("C:\\Users\\user\\Desktop\\File_of_combinations.txt", 'w')
dictionary = []
for word in Dictionary:
    dictionary.append(word.strip())

def record_combination(itertools):
    for x in itertools:
        File_of_combinations.write(' '.join(x) + '\n')
    File2.close()


pool = Pool()
pool.map(record_combination,(itertools.permutations(dictionary, r=3))) 

Я думаю, что происходит то, что в методе record_combination итератор передается в качестве параметра, но вместо моего первого примера используются все процессоры.

принять, второй пример не работает. Почему это?

Любая помощь будет оценена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...