【发布时间】:2017-06-02 20:33:02
【问题描述】:
我遇到了一个奇怪的问题,即我的一些任务在发送给代理后被丢弃。这发生在大约十分之一的任务中。我已经检查过没有老芹菜工人正在消耗这项任务。
我使用数据库支持的后端和花来监视丢失的任务,但是在 apply_async 之后返回的 task_id 不存在于数据库或花中。其状态始终为待处理。
然后我使用 celery 信号来了解发生了什么。我发现对于丢失的任务,只有 before_task_publish 和 after_task_publish 信号被触发。发布此任务没有任何踪迹。
这些是我的信号
@before_task_publish.connect
def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs):
# information about task are located in headers for task messages
# using the task protocol version 2.
logger.info("BEFORE TASK SENT id:"+body['id'])
@after_task_publish.connect
def after_task_publish_handler(sender=None, headers=None, body=None, exchange=None, routing_key=None, **kwargs):
# information about task are located in headers for task messages
# using the task protocol version 2.
logger.info("AFTER TASK SENT id:"+body['id'])
@task_prerun.connect
def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs):
logger.info("TASK PRERUN with TASK_ID:"+str(task_id))
这是我在日志中发现的
$ cat gunicorn-access.log | grep -i 103de274-00dc-4765-844f-d319e9e199c2
BEFORE TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2'
AFTER TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2'
我不确定这个任务是被 rabbitmq 忽略了,还是因为某种原因默默地放弃了。
【问题讨论】:
-
找到原因了吗?
-
还没有,我从rabbitmq搬到sqs,也更新到最新的celery版本
标签: rabbitmq celery celery-task