【问题标题】:Django generating test data incredibly slowDjango 生成测试数据的速度非常慢
【发布时间】:2015-12-23 07:25:35
【问题描述】:

Django 1.8,Postgres 8.4.20

我正在尝试在 DB 中准备一些性能测试数据 - 生成 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
  • DB 与 Django 在同一台服务器上?您可以尝试为 n in range(10000) 执行并并行运行脚本 10 次
  • 好的,谢谢。但是为什么现在这么慢?填充数据库的单个 django 脚本是否有任何限制?
  • @AshwiniChaudhary 比我的更好,尽管手册确实说它不适用于多对多关系
  • 您也可以使用fixtures,其想法是生成xml或json文件以加载数据。

标签: python django postgresql test-data


【解决方案1】:

按照 cmets 中的建议,我使用了 bulk_create 并并行启动了 10 次我的脚本。这将速度提高到每秒大约 100 个用户条目,这对我来说很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多