python - 在 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