首页 > 解决方案 > Celery 如何让一个工人只有在其他工人坏了时才能运行?

问题描述

我有两台服务器,每台服务器上有一个芹菜工人。我使用 Redis 作为代理与工人协作。

我的问题是我怎样才能让一个工人大部分时间只运行,一旦这个工人坏了,另一个工人会作为备用工人打开?

基本上,只需要一名工人作为后备。

在阅读了文档 [ http://docs.celeryproject.org/en/latest/userguide/routing.html#redis-message-priorities]

标签: pythoncelery

解决方案


以我的拙见,这完全违背了让分布式系统卸载 CPU 繁重或长时间运行的任务或拥有数千个您无法在其他地方运行的小任务的观点......

- 无论如何,您都在运行两台服务器,那么为什么要让另一台闲置呢?更多的工人意味着您将能够同时处理更多的任务。

如果你不相信,并且仍然想这样做,你需要在机器上用空闲的 Celery worker 编写一个小服务。该服务将定期检查活动工作人员的健康状况,如果检查失败,您将在备份服务器上运行 Celery 工作人员。

这是给你的一个问题——为什么这个服务根本不重启活动服务器上的芹菜工人?- 这样做几乎是可能的,所以再一次,我认为没有理由让一台完全闲置的机器什么都不做。如果你在云平台上,你可以很容易地从你的 Celery worker 的现有图像中启动一个新实例。这是我在生产中使用的场景。


推荐阅读