Я пытаюсь создать очень простую систему рекомендации предметов, используя количество раз купленных предметов,
, поэтому сначала я создал словарь item2item для счетчика, например
item2item = {'A': {'B': 4, 'C': 3}, 'B': {'A': 4, 'C': 2}, 'C':{'A': 3, 'B': 2}}
Например, люди покупали 'A' и 'B' вместе 4 раза.
Итак, если я получу образцы = ['A', 'C'], item2item ['A'] + item2item ['C '] дает наиболее часто покупаемые предметы
Однако, как вы могли ожидать, эта операция довольно тяжелая, поэтому я попытался использовать мультиобработку, как показано ниже
from tqdm import tqdm
from operator import add
from functools import reduce
from concurrent.futures import ProcessPoolExecutor
from collections import Counter
with ProcessPoolExecutor(max_workers=10) as pool:
for samples in tqdm(sample_list):
# w/o PoolExecutor
# combined = reduce(add, [item2item[s] for s in samples], Counter())
future = pool.submit(reduce, add, [item2item[s] for s in samples], Counter())
combined = future.result()
Однако это не ускорил процесс вообще.
Я подозреваю, что счетчик в функции уменьшения не является общим, как ответили в Python многопроцессорная и общий счетчик и https://docs.python.org/3/library/multiprocessing.html#sharing -state-Между-процессами .
Честно говоря, я не знаю, как эффективно использовать классы Value, Array или счетчик перезаписи.
Любая помощь приветствуется.