Использование macOS Mojave & Python 3.6.4.
Я попытался сгенерировать огромное количество uuid4s, которые, как я ожидаю, почти никогда не будут дублироваться при использовании нескольких процессов и uuid4 в Python3.Мой код ниже:
from multiprocessing import Pool
import pandas as pd
from uuid import uuid4
for m in range(5):
def insert_uuid(n):
df = pd.DataFrame()
df['uuid'] = [uuid4() for _ in range(1000000)]
df.to_csv('uuid_{}.csv'.format(m), mode='a', index=False)
print(m, n)
p = Pool(4)
p.map(insert_uuid, range(100))
Я вставил эти данные (500M записей) в RDB (BigQuery) и посчитал их.Запрос и его результат приведены ниже:
with all_data as (
select uuid from `test_dataset.uuid_0` union all
select uuid from `test_dataset.uuid_1` union all
select uuid from `test_dataset.uuid_2` union all
select uuid from `test_dataset.uuid_3` union all
select uuid from `test_dataset.uuid_4`
)
select count(1) as count, count(distinct(all_data.uuid)) as uniq, count(1) - count(distinct(all_data.uuid)) as diff from all_data
Результат
| count | uniq | diff |
|-----------|-----------|-------|
| 500000000 | 499979736 | 20264 |
Странно, что до 0,0041% дубликатов uuids дублируется.Я знаю, что очень мало шансов, что UUID4 дублирует.
Почему это происходит?Я думаю, что это связано с генерацией случайных чисел в ОС.