首页 > 解决方案 > 在 python 中使用多处理生成唯一的值集

问题描述

我正在尝试生成一组唯一的值,例如 (int, int) 的集合。我尝试使用多处理和faker。每个进程生成一个长度为 125000 的唯一列表,但最后当它被附加时,唯一值仅为 125000,即每个进程都生成了相同的一组值。由于我们期望有 1000000 个唯一值,有没有更好的方法来生成唯一值?

代码 :

from faker import Faker

faker = Faker()

def get_row():
    return [faker.unique.pyint(min_value=0, max_value=100000000, step=1), faker.unique.pyint(min_value=0, max_value=100000000, step=1)]

def get_rpwss(n):
    return np.unique([get_row() for x in range(n)], axis=0).tolist()

t0 = time.time()
n_threads = 8
total = 1000000
n_per_task = total // n_threads
result = []
with multiprocessing.Pool() as p:
    for batch in p.imap_unordered(get_rows,[n_per_task for x in range(n_threads)],):
        result = result + batch

old = result
result = np.unique(result, axis=0).tolist()

t1 = time.time()

print(len(result))
print(t1-t0)
print(len(old))

输出 :

125000
21.0101299338833
1000000

标签: pythonpython-multiprocessingrandom-seedfakerdata-generation

解决方案


推荐阅读