Мне нужно, чтобы некоторые перестановки выполнялись асинхронно, чтобы сократить время, необходимое для создания файла всех возможных перестановок в списке. У меня было несколько попыток многопроцессорной обработки, но безуспешно.
Требуемый результат:
Файл, содержащий список строк в следующем формате:
PRE + СОВМЕСТНОЕ ПЕРМУТАЦИЯ
где PRE из списка 'префикс'
, где JOINEDPERMUTATION находится из "" .join (x)
где х находится из перестановок (предметов, повторений)
ПУНКТЫ - это мой список значений, которые мне нужны для получения перестановок
ПОВТОРЫ Я хочу найти каждую перестановку этого списка в диапазоне (8) повторений
items=['a','b','c']
prefix=['one','two','three']
from itertools import permutations
from multiprocessing import Pool
pool=Pool(14)
def permutations(pre, repetitions, items):
PERMS = [ pre + "".join(x) for x in permutations(items, repetitions) ]
return PERMS
def result_collection(result):
results.extend(result)
return results
results=[]
args = ((pre, repetitions, items) for pre in prefix for repetitions in range(5))
for pre, repetitions, items in args:
pool.apply_async(permutations, (pre, repetitions, items), callback=result_collection)
pool.close()
pool.join()
with open('file.txt','a',encoding='utf-8') as file:
file.writelines(results)
Я не получаю ошибку как таковую, но после запуска этой программы со списком, в котором в ITEMS было 50 элементов, а в PREFIXES - 5; он не был закончен через 8 часов, и я не представляю, как продолжить расследование.
Быстрый запрос, а также Прав ли я, считая, что в принципе нет смысла использовать 'pool.map' в многопроцессорном модуле, учитывая, что он когда-либо будет использовать только одного работника? Почему это здесь?