2022-08-12~13 개발일지

컴클로딩·2022년 8월 13일
0

📍 Intro

  • 더미 데이터를 만들기 위해 공부중이다. 진행하면서 문제점 어려운 점을 정리하고자 한다.

1. UniquenessException

  • 발생한 오류

    •   Traceback (most recent call last):
        File "user-data.py", line 32, in <module>
          email = fake.unique.ascii_free_email()
        File "C:\Users\21528463\AppData\Local\Programs\Python\Python36\lib\site-packages\faker\proxy.py", line 320, in wrapper
          raise UniquenessException(f"Got duplicated values after {_UNIQUE_ATTEMPTS:,} iterations.")     
      faker.exceptions.UniquenessException: Got duplicated values after 1,000 iterations.
  • 오류가 발생한 코드

from faker import Faker
from faker.providers import DynamicProvider
import time

fake = Faker('ko_KR')

class User:
    """
    User Class
    """
    
    def __init__(self, id, email, role):
        self.user_id = id
        self.email = email
        self.role = role

    def __str__(self):
        return 'User(id={0}, email={1}, role={2})'.format(self.user_id, self.email, self.role)


user_role_provider = DynamicProvider(
     provider_name="set_user_role",
     elements=["ADMIN", "USER"],
)

fake.add_provider(user_role_provider)

user_list = []

start = time.time()
for i in range(1, 10000000):
    email = fake.unique.ascii_free_email()
    role = fake.set_user_role()
    user = User(i,email, role)
    user_list.append(user)

print("time :", time.time() - start)  # 현재시각 - 시작시간 = 실행 시간
print("User 객체 생성 완료!") # 1000만 개
  • 오류 발생 이유
    • email이 곧 아이디값이기 때문에 유니크한 값이어야만 한다. 그래서 코드에 보면 fake.unique.ascii_free_email()에 unique가 들어간다. 하지만 지금 1000만개를 돌다보니 fake.unique.ascii_free_email()에 더 이상 유니크한 값이 없어서 나는 에러인 것 같다.
  • 해결책
    • 아직 해결책은 없고...한 번 고민해봐야겠다...
    • 1000만 개, 100만 개, 20만 개 에러
    • 10만 개 👉🏻 30.160502672195435초
    • 15만 개 👉🏻 72.7302782535553초
profile
어떠한 가치를 창출할 수 있을까를 고민하는 개발자. 주로 Spring으로 개발해요. https://comclothing.tistory.com/ 👈🏻티스토리 블로그로 이전 완료

0개의 댓글