1

私はDjango 1.4を実行しており、Postgres 9.2.4とともにpsycopg2を使用しています。

私の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)

どんな助けでも大歓迎です!

4

1 に答える 1

1

これは、管理コマンド内で Django がデータベース接続を閉じないという特定の問題のようです。

修正は、次のように handle() の最後で明示的にデータベース接続を閉じることでした:

import ...
from django import db


class Command(BaseCommand):
    help = 'Update the Entry hits'

    def handle(self, *args, **options):
        ...
        db.close_connection() 
于 2013-05-31T18:03:51.373 に答える