多重处理未返回所有值

时间:2020-03-10 19:23:28

标签: python multiprocessing itertools brute-force

这可能是一个非常简单的问题,但肯定让我烦了。为了使用多重处理,我编写了以下函数thread()来并行化函数破解。函数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 :(得分:0)

是否正在寻找类似结果?

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')]