【发布时间】:2013-08-17 01:39:20
【问题描述】:
我正在运行带有 Redis 代理和数据库结果后端的 Django Celery,这与我用于主应用程序的 Postgres DB 相同。
最近我遇到了 Postgres 服务器重新启动并且工作进程失去其数据库连接的情况。发生这种情况后,即使数据库返回并且主 Django 站点正常响应,芹菜任务也不会再次成功。在处理任何内容之前,我需要重新启动 celeryd 进程。所有 celery 任务都报同样的错误:
DatabaseError: terminating connection due to administrator command
SSL connection has been closed unexpectedly
我知道当使用 db results 后端时,Celery 无法报告失败,因此在外部看来,这些任务似乎从未执行过,但我不明白为什么后续任务会失败。 Celery 文档说它不会在任务之间保持数据库连接,因此新任务应该建立新连接。
那么,为什么会发生这种情况?数据库连接是否存在一些较低级别的持久性?如何让 celery 重试这些任务?
【问题讨论】:
-
不确定它是否完全相关,但我之前在 Django 中遇到过这个错误:code.djangoproject.com/ticket/15802
-
似乎相关,但在我的情况下,我希望 celery 明确关闭连接并且下一个任务正常运行,但那没有发生。
标签: django postgresql django-celery