首页 > 解决方案 > 多处理不返回所有值

问题描述

这可能是一个非常简单的问题,但绝对让我筋疲力尽。为了使用多处理,我编写了以下函数 thread() 来并行化函数破解。Function 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()

标签: pythonmultiprocessingitertoolsbrute-force

解决方案


正在寻找这样的结果吗?

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

推荐阅读