首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django.db.utils.InterfaceError:连接已关闭

django.db.utils.InterfaceError:连接已关闭
EN

Stack Overflow用户
提问于 2022-03-22 09:55:14
回答 1查看 825关注 0票数 5

堆栈: Ubuntu (20.04LTS) (v13.3)一个AWS负载均衡器将流量发送到Ubuntu实例(k8s集群),该实例由Nginx处理,Nginx将转发到Django (4.0.3),运行在gunicorn (19.9.0)中。Django使用psycopg2连接到数据库(2.8.6)。我遇到的问题是数据库连接似乎是随机关闭的。

Django报告的错误如下:

代码语言:javascript
复制
`InterfaceError: connection already closed
  File "django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "django/views/generic/base.py", line 84, in view
    return self.dispatch(request, *args, **kwargs)
  File "django/utils/decorators.py", line 46, in _wrapper
    return bound_method(*args, **kwargs)
  File "django/views/decorators/cache.py", line 62, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "django/views/generic/base.py", line 119, in dispatch
    return handler(request, *args, **kwargs)
  File "django/views/generic/detail.py", line 108, in get
    self.object = self.get_object()
  File "django/views/generic/detail.py", line 53, in get_object
    obj = queryset.get()
  File "django/db/models/query.py", line 492, in get
    num = len(clone)
  File "django/db/models/query.py", line 302, in __len__
    self._fetch_all()
  File "django/db/models/query.py", line 1507, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "django/db/models/query.py", line 57, in __iter__
    results = compiler.execute_sql(
  File "django/db/models/sql/compiler.py", line 1359, in execute_sql
    cursor = self.connection.cursor()
  File "django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "django/db/backends/base/base.py", line 284, in cursor
    return self._cursor()
  File "django/db/backends/base/base.py", line 262, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "django/db/backends/base/base.py", line 262, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "django/db/backends/postgresql/base.py", line 256, in create_cursor
    cursor = self.connection.cursor()`

Postgresql没有报告任何重大错误:我只能假设连接已正确关闭,Django没有预料到它。这种情况很少发生,但足以引起关注:每3天一次。任何关于如何进一步调查这一问题的建议都将得到感激的接受。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-25 21:17:55

我使用django-服务-对象Django-Q作为分布式数据挖掘代码。当我运行Django-Q集群async_task(..., sync=True)进行调试时,遇到了"django.db.utils.InterfaceError: connection already closed“错误,并试图使用Model.object.get(pk=...)查询Django PostgreSQL 13 DB。

我通过在服务类中设置db_transaction = False来解决这个问题。

代码语言:javascript
复制
class dataMining(Service):
    db_transaction = False

https://django-service-objects.readthedocs.io/en/stable/pages/usage.html#database-transactions

db_transaction=True (默认启用)的效果是“服务上的...process方法.在事务中.”。这意味着,在服务类的PostgreSQL方法成功完成之前,不会实际保存对Django def process(self) DB的更改。https://django-service-objects.readthedocs.io/en/stable/pages/usage.html#service

我怀疑代码示例中的self.object = self.get_object()调用在DB事务中的进程方法中遇到了“被锁定”的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71570031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档