Faker.credit_card_number - 从性能的角度来看,它不会更快吗?

Faker.credit_card_number - Is it expected that it's not faster from a performance stand point?

写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])

仔细看看 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