【发布时间】:2013-09-25 18:41:23
【问题描述】:
我编写了一个处理财务数据处理的 Djano 应用程序。 我必须从 MySQL 表中加载大数据(超过 1000000 条记录),并将记录转换为 django 视图中的 JSON 数据,如下所示:
trades = MtgoxTrade.objects.all()
data = []
for trade in trades:
js = dict()
js['time']= trade.time
js['price']= trade.price
js['amount']= trade.amount
js['type']= trade.type
data.append(js)
return data
问题是FOR循环很慢(200000条记录需要9秒以上),有没有什么有效的方法可以在Python中将DB记录转换为JSON格式数据?
更新:我已根据 Mike Housky 在我的 ENV(ActivePython2.7,Win7) 中的回答运行代码,代码更改为:
def create_data(n):
from api.models import MtgoxTrade
result = MtgoxTrade.objects.all()
return result
Build ............ 0.330999851227
For loop ......... 7.98400020599
List Comp. ....... 0.457000017166
Ratio ............ 0.0572394796312
For loop 2 ....... 0.381999969482
Ratio ............ 0.047845686326
你会发现 for 循环大约需要 8 秒!如果我注释掉 For 循环,那么 List Comp 也需要这样的时间:
Times:
Build ............ 0.343000173569
List Comp. ....... 7.57099986076
For loop 2 ....... 0.375999927521
我的新问题是for循环是否会触及数据库?但我没有看到任何数据库访问日志。好奇怪!
【问题讨论】:
-
你可以换个角度看问题。您可以使用 Celery 异步完成所有昂贵的任务
-
Celery 适合异步编程,但我的情况现在更喜欢同步设计,也许以后检查一下:)谢谢~
-
设置
DEBUG = False再试一次。 -
@Burhan Khalid,DEBUG=False 无法解决问题。
标签: python django json python-2.7 django-models