最近一直在使用celery做多进程并发任务,遇到一个非常棘手的问题, 我尝试过解决,但是收集各种方法,均未能解决我的问题。
问题: Celery多任务处理程序,任务采用类封装继承celery.task 的类Task来完成我的任务,当然任务中包含我的成功和失败重写的方法。当然我的程序不重要,随便的一个程序都会出现,kombu.exceptions.OperationalError错误,Cannot route message for exchange 'reply.celery.pidbox': Table emply or key no longer exists,我查得相关解释为redis中的key reply.celery.pidbox 被驱逐,导致无法路由的问题, 我从而我怀疑是redis的配置问题,我尝试过现有一直争取使用的redis集群,也会同样报出pidbox被驱逐的问题。进而我还是celery可能存在某种问题,请大神还望指点,多谢
错误信息如下:
kombu.exceptions.OperationalError:
Cannot route message for exchange 'reply.celery.pidbox': Table emply or key no longer exists
RuntimeError: pubsub connection not set: did you forget to call subscribe() or psubscribe()?
Celery version:
python 4.6.5
celery 4.3.0
redis 3.2.1 (Using the cluster)
kombu 4.6.2 (4.6.4 4.6.5 Try to release)
你的celery broker配置信息是什么样的?visibility_timeout?
你好,broker只配置了redis哨兵,并未配置visibility_timeout
如: BROKER_TRANSPORT_OPTIONS = {‘master_name’: 'mymaster'}
@朝鲁梦_FQM: kombu 4.6.2 (4.6.4 4.6.5 Try to release) 啥意思?4.6.5也试过了?
https://github.com/uktrade/data-hub-api/pull/2143
@Zioyi: 你好,kombu 4.6.3 到 4.6.5 都有尝试,问题还是依然复现,同样对celery版本由4.3.0 升级到4.4.0还是会报错,错误信息如下
kombu.exceptions.OperationalError:Cannot route message for exchange 'reply.celery.pidbox': Table emply or key no longer exists
During handling of the above exception, another exception occurred
BrokenPipeError: [Errono 32] Broken pipe