Многопроцессорная обработка не возвращает все значения - PullRequest
0 голосов
/ 10 марта 2020

Это может быть очень простой вопрос, но он определенно измотал меня. Чтобы использовать многопроцессорность, я написал следующую функцию thread (), которая распараллеливает функцию crack. Функция Crack возвращает несколько списков внутри списка. Но когда я использую функцию потока, она не возвращает каждое значение. Как я могу это исправить?

UPPER_ALPHA = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D',
               'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ]

def crack(UPPER_ALPHA):
    GEN = list(itertools.product(UPPER_ALPHA, repeat=4))
    return GEN

def thread(w_input):
pool = mp.Pool()
results = pool.map(crack,UPPER_ALPHA)
print(results)
pool.close()
pool.join()

1 Ответ

0 голосов
/ 10 марта 2020

Ищете что-то похожее на этот результат?

from multiprocessing import Pool, Process
from functools import partial

#Function for single process
def function(rep, val):
    return (val,) * rep

# Function for handling multiprocessing
def handler(function, data, rep, workers=4):
    func = partial(function,rep)
    with Pool(workers) as pool:
        r = pool.map(func, data)
    return r

data = ['a','b', 'c']
GEN = handler(function, data, 2, workers=4)
print(GEN)

Результат:

[('a', 'a'), ('b', 'b'), ('c', 'c')]
...