【发布时间】:2022-08-16 18:49:20
【问题描述】:
在我的 Django 应用程序中,我使用 Celery 来处理运行时间很长的任务。其中一项任务必须在最后将记录写入数据库,以确认该过程已完成。出于某种原因,如果任务运行了这么长时间(这里说 4 小时或更长时间) 我得到了这个:
ConnectionResetError:[Errno 104] 对等方重置连接
一旦我在任务的最后触发对数据库的写操作,就会发生这种情况,例如:
Files.objects.filter(pk=files_obj).update ... etc知道为什么对等方重置连接(在我的例子中是 MariaDB)会很有趣。 Django 不使用连接池为我管理数据库连接吗? 我还在 Django 端检查了我的 Redis 配置,在我看来只有以下几行才是真正重要的:
BROKER_TRANSPORT_OPTIONS = {\'visibility_timeout\': 86400} # 24 hrs. CELERYD_TASK_TIME_LIMIT = 86400 # 24 Hrs. CELERYD_TASK_SOFT_TIME_LIMIT = 86400 # 24 Hrs.有没有办法让函数触发一个新的连接?对我来说,只要任务正在运行,Celery 任务似乎就会使 SQL 连接保持活动状态。但是数据库后端不尊重这一点这么久。
这就是我开始我的芹菜工人的方式:
celery -A App worker --pool=gevent --concurrency=4 --loglevel INFO --pidfile= --schedule=/home/$OS_USER/celery-schedule提前致谢。
-
你设法解决了这个问题吗?我有同样的问题。
-
@Olney1 请看我的回答