相关疑难解决方法(0)

Celery:具有并发性和保留任务的工作程序仅运行1个任务

我的代码中的一些任务执行时间越来越长.

经过检查,我注意到虽然我将我的工作节点设置为并发6,并且存在6个进程以"正常工作",但只有1个任务显示在"正在运行的任务"下.这是一个小小的视觉证据:

以下是工人选项:

工人的选择,如花

这里是该工作人员的任务选项卡,只有一个正在运行的进程:

在此输入图像描述

我发现如果我重新启动celery,并发性再次受到尊重,我会看到> 1运行任务,但经过一段时间/任务后,它会恢复到这种行为.

解决这个间歇性问题的任何想法?

concurrency celery django-celery

15
推荐指数
1
解决办法
5913
查看次数

芹菜中的预取任务是否被承认?

我有以下设置:

  • RabbitMQ经纪人+ Django
  • 芹菜与CELERYD_PREFETCH_MULTIPLIER = 32(我有很多小任务,因此从性能角度预取它们很有意义)
  • CELERY_ACKS_LATE = False(任务不是幂等的)

我在码头工人的容器中运行芹菜,所以当我重建码头工人时,芹菜工人没有优雅地关闭.这是可以的,如果没有确认任务,因为一旦工人再次在新的docker容器中,经纪人会将它们发回去,但在其他情况下,他们将会丢失.

在花管理面板中,预取任务已收到状态.

我仔细阅读了官方文档和相关问题,直觉上我觉得我的设置中的预取任务得到了认可.是这样吗?

django rabbitmq celery celery-task

5
推荐指数
1
解决办法
380
查看次数

Celery 在指定 taskid 之前检查待处理的任务数

celery 是否支持在给定任务 id 之前返回待处理的任务编号?

例如,没有 celery worker 启动,我推送 task1、task2、task3,三个都挂了,现在,我想要的是,如果我给 task3,它告诉我在 3 之前有 2 个挂起的任务。

我使用 celery celery 4.1,rabbitmq 3.5.4 作为代理,redis 3.2.9 作为结果后端。

虽然我可以通过管理 API(例如 pyrabbit 包中的 get_queue_depth )获取兔子队列深度,但这会导致整个队列深度,而不是指定任务 id 之前的待处理数。

而且我知道我可以自己维护一个队列来管理推送的任务 ID。

但我想知道芹菜或rabbitmq本身是否有任何简单的方法。

谢谢。

python rabbitmq celery

5
推荐指数
1
解决办法
431
查看次数