Celery - task_ids 的冲突

发布于 2024-11-01 03:41:54 字数 228 浏览 0 评论 0原文

我的任务遇到 HardTimeLimit 异常。经过日志检查后,我发现 -

  1. celery 未接收任务(任务 id 没有“从代理获取任务:”消息)
  2. 几天前执行了具有相同 id 的任务。

任务 ID 由 @task 装饰器自动分配,任务由 django 启动,每天大约有 2k 个任务(每天大约有 30 次冲突)。

ID的冲突怎么可能发生?如何预防。

I'm getting HardTimeLimit exception for my tasks. After log examination i found -

  1. task is not being received by celery ( No "Got task from broker:" message for task id)
  2. task with the same id was executed couple a days ago.

Task ids are assigned automatically by @task decorator, tasks are started by django, there are ~2k tasks per day ( and ~30 collisions per day).

How ID's collision is possible? How to prevent it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入画浅相思 2024-11-08 03:41:54

这应该是不可能的,即使如此,也应该是非常罕见的。我的猜测是,在异常发生后第二次执行相同的任务。也许您的路由键有问题,因为工作人员没有收到任务?或者代理有问题,我见过 RabbitMQ 的有趣问题。删除它的数据库(RABBITMQ_MNESIA_BASE)对我的情况有帮助。

It shouldn't be possible and even if, it should be very rare. My guess would be that the same task is executed a second time after your exception. Maybe there is a problem with your routing keys as the worker doesn't get the task? Or the broker has a problem, I've seen funny problems with RabbitMQ. Deleting it's database (RABBITMQ_MNESIA_BASE) helped in my case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文