Django 生成测试数据非常慢
Django generating test data incredibly slow
Django 1.8,Postgres 8.4.20
我正在尝试在数据库中准备一些性能测试数据 - 生成 100 000 个 Django 用户以及其他模型实例。这是我的代码:
for n in range(100000):
# Generate User with one related Profile
user = User.objects.create(username=str(random.random()))
UserProfile.objects.create(custom_id=str(random.random()), user=user)
# For each User generate a Journey with 10 related Visits
journey = Journey.objects.create(user_id=user.id)
for i in range(10):
journey.visit_set.add(Visit(custom_id=str(random.random())))
# Also for each User generate a Progress with 100 related Challenges
progress = Progress.objects.create(user_id=user.id)
for j in range(100):
progress.challenge_set.add(Challenge(custom_id=str(random.random())))
它按预期工作,唯一的问题是它非常慢。在具有 1 个内核和 1 Gb RAM 的 VPS 上,只用了 1 小时就生成了 4000 个具有相应相关条目的用户。
消耗的CPU大约是10%,内存200mb,平均负载在1.00左右浮动。
我怎样才能加快速度?
正如评论中所建议的那样,我使用了 bulk_create 并并行启动了我的脚本 10 次。这将速度提高到每秒大约 100 个用户条目,这对我来说很好。
Django 1.8,Postgres 8.4.20
我正在尝试在数据库中准备一些性能测试数据 - 生成 100 000 个 Django 用户以及其他模型实例。这是我的代码:
for n in range(100000):
# Generate User with one related Profile
user = User.objects.create(username=str(random.random()))
UserProfile.objects.create(custom_id=str(random.random()), user=user)
# For each User generate a Journey with 10 related Visits
journey = Journey.objects.create(user_id=user.id)
for i in range(10):
journey.visit_set.add(Visit(custom_id=str(random.random())))
# Also for each User generate a Progress with 100 related Challenges
progress = Progress.objects.create(user_id=user.id)
for j in range(100):
progress.challenge_set.add(Challenge(custom_id=str(random.random())))
它按预期工作,唯一的问题是它非常慢。在具有 1 个内核和 1 Gb RAM 的 VPS 上,只用了 1 小时就生成了 4000 个具有相应相关条目的用户。
消耗的CPU大约是10%,内存200mb,平均负载在1.00左右浮动。
我怎样才能加快速度?
正如评论中所建议的那样,我使用了 bulk_create 并并行启动了我的脚本 10 次。这将速度提高到每秒大约 100 个用户条目,这对我来说很好。