1

Django モデル オブジェクトを 10000 個のバッチで json としてシリアル化し、送信しています。DjangoFullSerializersを使用しています関連するフィールドをオブジェクトと一緒にシリアル化することも望んでいたため、wadofstuff からこれを行うことができました。サーバー負荷のピーク時には、1 つのバッチが完了するまでに約 9 ~ 10 分かかります。MySQL の 10000 オブジェクトのフェッチには、1 ~ 2 秒かかります。JSON へのシリアル化が何をして、多くのオーバーヘッドがかかるのかわかりません。simplejson (関連するフィールドをシリアル化するオプションはありません) を使用してみましたが、それでも十分な時間がかかります。よくわかりませんが、wadofstuff は画面の後ろで simplejson を使用していると思います。Django で cjson を構成できなかったため、テストできませんでした。しかし、どうすれば最適に構成したり、現在のセットアップの使用を改善したりできますか? 直感的には、データがメモリにフェッチされると、10000 個のオブジェクトを JSON に変換するのにそれほど時間がかからないはずだと思います。cProfile を使用して取得したプロファイル ダンプを添付します。見て、いくつかの指針/ヒント/ヘルプを提案してください。

添付ファイル: cProfile ダンプ ファイル

前もって感謝します。

更新 1: テストに使用しているコードも書いています。これをシェルで実行しています。

import cProfile
from dashboard.models import *
from django.core import serializers
from datetime import datetime

start = end = None
def myfunc():
 global start, end
 start = datetime.now()
 us = UserPermission.objects.filter(username = 54).values_list('district_operated', flat=True)
 villages = list(Village.objects.filter(block__district__id__in = us))
 offset = 0
 limit = 10000
 screenings = Screening.objects.select_related('village').filter(village__in = villages).distinct().order_by("-id")[offset:limit]
 x = list(screenings)
 json_subcat = serializers.serialize("json", screenings, relations=('village',))
 end = datetime.now()


cProfile.runctx("myfunc()", globals(), locals(), 'dump.profile')
4

0 に答える 0