One way to break the product up into parts is to break up the first component of the product, so that each independent job has all the elements starting with a certain set of first letters. For example:
import string
import multiprocessing as mp
import itertools
alphabet = string.ascii_letters+string.digits+"!@#$%^&*?,()-=+[]/;"
num_parts = 4
part_size = len(alphabet) // num_parts
def do_job(first_bits):
for x in itertools.product(first_bits, alphabet, alphabet, alphabet):
print(x)
if __name__ == "__main__":
pool = mp.Pool()
results = []
for i in xrange(num_parts):
if i == num_parts - 1:
first_bit = alphabet[part_size * i :]
else:
first_bit = alphabet[part_size * i : part_size * (i+1)]
results.append(pool.apply_async(do_job(first_bit)))
pool.close()
pool.join()
(where obviously you'd only use results
if do_job
actually returned something).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…