【问题标题】:Celery task fails midway while pulling data from a large databaseCelery 任务在从大型数据库中提取数据时中途失败
【发布时间】:2019-08-24 15:46:58
【问题描述】:

我在 django-rest 应用程序中使用 celery 运行定期任务,该应用程序从具有多个表的大型 Postgres 数据库中提取数据,任务启动良好并提取一些数据约 50 分钟,然后因此错误而失败

client_idle_timeout
server closed the connection unexpectedly, This probably means the server terminated abnormally before or while processing the request.

可能是什么问题导致此问题,我该如何解决?

【问题讨论】:

  • 可以分享代码吗?
  • 这是一个 50 分钟的任务,并且正在提取数据……内存不足? postgres 使您的连接超时,因为您在处理过程中将其保持打开的时间过长?
  • 我能够通过增量查询少量数据来解决问题,从而防止超时。谢谢@paraschauhan 和 Andrew

标签: django postgresql django-rest-framework celery


【解决方案1】:

这很可能意味着您的 PostgreSQL 对事务可以花费多长时间(事务中的空闲)或会话可以持续多长时间(会话超时)有限制。

这可能是因为处理数据库的一种典型的、不正确的方式(我已经看到即使是高级开发人员也这样做过)——进程创建一个数据库会话,然后开始执行一些可能需要很长时间才能完成的业务逻辑完成,而数据库数据已部分更新或插入。由于 PostgreSQL 强制超时,以这种方式编写的代码注定会失败。

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多