我有一个Celery worker配置为连接到redis,如下所示:
celery_app_site24x7 = Celery('monitoringExterne.celerys.site24x7',
broker=settings.REDIS['broker'], backend=settings.REDIS['backend'])
celery_app_site24x7.conf.broker_transport_options = {
'visibility_timeout': 36000
}
celery_app_site24x7.conf.socket_timeout = 300
celery_app_site24x7.conf.broker_connection_max_retries = None
celery_app_site24x7.config_from_object('django.conf:settings')
celery_app_site24x7.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
问题是,如果Redis关闭,重新建立连接,则添加到队列中的新任务不会执行:
[2020-01-13 10:10:14,517: ERROR/MainProcess] consumer: Cannot connect to redis://xxx.xxx.xxx.xx:6380/10: Error while reading from socket: ('Connection closed by server.',).
Trying again in 2.00 seconds...
[2020-01-13 10:10:16,590: INFO/MainProcess] Connected to redis://xxx.xxx.xxx.xx:6380/10
[2020-01-13 10:10:16,699: INFO/MainProcess] mingle: searching for neighbors
[2020-01-13 10:10:17,766: INFO/MainProcess] mingle: all alone
我已经通过django shell手动调用了一个celery 任务,如下所示:
celery任务站点24 x7测试延迟()
它向我返回异步任务ID,但工作进程不处理此任务。
<AsyncResult:ff634b85-edb5-44d4-bdb1-17a220761fcc>
如果我继续延迟启动任务,队列将不断增加:
127.0.0.1:6379[10]> llen site24x7
(integer) 4
127.0.0.1:6379[10]> llen site24x7
(integer) 5
下面是celery 的输出状态和检查
$ celery -外部监控--应用程序=外部监控. celerys.site24x7
状态错误:没有节点在时间限制内回复。
$ celery -外部监控--应用程序=监控外部. celerys.site24x7检查活动
错误:在时间限制内没有节点回复。
2条答案
按热度按时间ukdjmx9f1#
如果您的工作线程未订阅
site24x7
队列,则该队列中的任务数将不断增加...请尝试使用以下内容运行工作:celery -A monitoringExterne.celerys.site24x7 -Q site24x7 -l info
另外,请记住
-A
和--app
是同一个标志,不应同时使用。如果您得到的是
No nodes replied within time constraint
输出,这意味着集群中没有活动的Celery工作线程,这也可能是该队列中任务数量增加的原因-没有工作线程来执行它们!8yparm6h2#
Redis上的Celery似乎存在一个问题,实际上可能是导致此问题的原因:
Worker stops consuming tasks after redis reconnection