Faker.credit_card_number - Ожидается ли, что это не быстрее с точки зрения производительности? - PullRequest
0 голосов
/ 02 августа 2020

Неужели для записи 10000 записей требуется 20 минут? Или так написан код, который можно оптимизировать?

Если используются генераторы случайных чисел, это займет менее 1 минуты или около того.

import random
import csv
from faker import Faker

def PanGeneratorType():
    fake = Faker()
    Card_Type = ['amex','mastercard','visa16','visa19','discover']
    Pan_Num = fake.credit_card_number(random.choice(Card_Type))
    return Pan_Num

def RandomGenerator():
    randCardType=random.choice([3,4,5,6])
    if randCardType==3:
        randCardNumber=random.randrange(300000000000000,399999999999999,1)
    elif randCardType==6:
        randCardNumber=random.randrange(6000000000000000,6999999999999999,1)
    elif randCardType==5:
        randCardNumber=random.randrange(5000000000000000,5999999999999999,1)
    elif randCardType==4: 
        randCardNumber=random.randrange(4000000000000000,4999999999999999,1)
    return randCardNumber    


with open("Cards.CSV", "wt", newline='') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerow(['CARD_NUM'])
    for i in range(1000):
        Card_Num = PanGeneratorType()
            
    writer.writerow([Card_Num])

1 Ответ

0 голосов
/ 02 августа 2020

посмотрите внимательнее на то, что находится в PanGeneratorType (). Вы называете это 1000 раз. инициализация 1000 Faker (), каждая из которых запускает fake.credit_card_number () 1 раз.

def PanGeneratorType():
    fake = Faker()
    Card_Type = ['amex','mastercard','visa16','visa19','discover']
    Pan_Num = fake.credit_card_number(random.choice(Card_Type))
    return Pan_Num

t = time.time()
for i in range(1000):
   Card_Num = PanGeneratorType()
print("Time taken: " + str(time.time()-t))
Time taken: 85.47297310829163

Намного быстрее создать 1 Faker () и дать ему 1000 заданий, чем создать 1000 Faker () по 1 заданию.

def PanGeneratorType(n):
    fake = Faker()
    Card_Type = ['amex','mastercard','visa16','visa19','discover']
    result = []
    for i in range(n):
        result.append(fake.credit_card_number(random.choice(Card_Type)))
    return result

t = time.time()
Card_Numbers = PanGeneratorType(1000)
print("Time taken: " + str(time.time()-t))

#for cc in Card_Numbers:
    #print(cc)
    #write to file
    #etc etc
Time taken: 0.11200523376464844
...