我正在运行Django 1.4并使用psycopg2和Postgres 9.2.4。
在我的Postgres日志中
2013-05-30 16:20:22 UTC LOG: could not receive data from client: Connection reset by peer
以下是导致它的代码。这是一个管理命令。我做过研究,我能找到的一切都是关于django交易。我没有使用它们,我也试过以下无效。
['DATABASES']['default']['OPTIONS']['autocommit'] = True
我也读过关于oom-killer的可能性,但我仍然有大量的内存,而不是在日志中。
import sys
from django.core.mail import mail_admins
from django.core.management.base import BaseCommand
from django.db.models import F
from redis_cache import get_redis_connection
class Command(BaseCommand):
help = 'Update the Entry hits'
def handle(self, *args, **options):
from vplatform.content.models import Entry
redis_conn = get_redis_connection('default')
hits_for_obj = dict()
hit_len = int(redis_conn.llen('entry-hits'))
while (hit_len > 0):
hit_len = hit_len - 1
obj_id = redis_conn.rpop('entry-hits')
hits_for_obj[obj_id] = hits_for_obj.get(obj_id, 0) + 1
for obj_id, hits in hits_for_obj.items():
try:
entry = Entry.objects.get(pk=obj_id)
entry.hit_count = F('hit_count') + hits
entry.save()
except:
e = sys.exc_info()[0]
message = "Error: %s" % e
mail_admins('Update hits error', message)
非常感谢任何帮助!
答案 0 :(得分:1)
这似乎是Django在管理命令中没有关闭数据库连接的特定问题。
修复是在handle()的末尾显式关闭数据库连接,如下所示:
import ...
from django import db
class Command(BaseCommand):
help = 'Update the Entry hits'
def handle(self, *args, **options):
...
db.close_connection()