我做了一些诊断发现htop
:
python save_to_db.py
占用86%的CPUpostgres: mydb mydb localhost idle in transaction
占用16%的CPU。在我的save_to_db.py
代码如下:
import datetime
import django
import os
import sys
import json
import itertools
import cProfile
# setting up standalone django environment
...
from django.db import transaction
from xxx.models import File
INPUT_FILE = "xxx"
with open("xxx", "r") as f:
volume_name = f.read().strip()
def todate(seconds):
return datetime.datetime.fromtimestamp(seconds)
@transaction.atomic
def batch_save_files(files, volume_name):
for jf in files:
metadata = files[jf]
f = File(xxx=jf, yyy=todate(metadata[0]), zzz=todate(metadata[1]), vvv=metadata[2], www=volume_name)
f.save()
with open(INPUT_FILE, "r") as f:
dirdump = json.load(f)
timestamp = dirdump["curtime"]
files = {k : dirdump["files"][k] for k in list(dirdump["files"].keys())[:1000000]}
cProfile.run('batch_save_files(files, volume_name)')
以及相应的cProfile转储(我只保留了cumtime大的):
^{pr2}$运行time python save_to_db.py
需要14分钟,大约1000次插入/秒。这相当慢。在
我的File
模式如下:
xxx TEXT UNIQUE NOT NULL PRIMARY KEY
yyy DATETIME
zzz DATETIME
vvv INTEGER
www TEXT
我似乎不知道如何加快这个过程。有没有我不知道的方法?目前我索引所有的东西,但如果这是主要的瓶颈,我会非常惊讶。在
谢谢你!在
您可以使用bulk create。在
相关问题 更多 >
编程相关推荐