加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – SSL SYSCALL错误和CONN_MAX_AGE> 0时强制新数据库

发布时间:2020-12-20 13:51:16 所属栏目:Python 来源:网络整理
导读:使用Postgres和RabbitMQ在Heroku上使用Django 1.7和Celery. 我最近将Django中的 CONN_MAX_AGE 设置设置为60左右,因此我可以开始汇集数据库连接.这工作正常,直到我发现一个问题,如果由于任何原因数据库连接被杀死,Celery将继续使用错误的数据库连接,消耗任务
使用Postgres和RabbitMQ在Heroku上使用Django 1.7和Celery.

我最近将Django中的CONN_MAX_AGE设置设置为60左右,因此我可以开始汇集数据库连接.这工作正常,直到我发现一个问题,如果由于任何原因数据库连接被杀死,Celery将继续使用错误的数据库连接,消耗任务但立即在每个任务中抛出以下错误:

OperationalError: SSL SYSCALL error: Bad file descriptor

我想继续汇集数据库连接,但现在已经发生了几次,我显然不能让Celery随机失败.如何在遇到此错误时让Django(或Celery)强制新的数据库连接?

(或者,我的另一个想法是强制Celery工作者使用修改后的settings.py运行,它仅为Celery设置CONN_MAX_AGE = 0 …但这感觉非常像错误的方法.)

Please note that this StackOverflow question seems to solve the problem on Rails,but I haven’t found an equivalent for Django:
07001

解决方法

我遇到了同样的问题,并将其追溯到CONN_MAX_AGE和CELERYD_MAX_TASKS_PER_CHILD的组合.在那一点上,显而易见的是,当一个工人被替换时,它必须与Celery没有正确关闭连接,并且我发现了这个错误报告: https://github.com/celery/celery/issues/2453

升级到Celery 3.1.18似乎已经为我解决了这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读