总结自这篇有用的博客文章: https://kfalck.net/2013/02/21/run-multiple-celeries-on-a-single-redis/ 为每个项目指定不同的数据库编号,例如 redis://localhost/0 和 redis://localhost/1 为不同的项目定义和使用不同的队列名称。在任务方面,定义 CELERY_DEFAULT_QUEUE,并在启动 worker 时使用 -Q 参数来指定该队列。更多关于路由的信息请参考:http://docs.celeryproject.org/en/latest/userguide/routing.html
我曾使用redis作为celery的后端,同时在同一redis数据库中使用带前缀的缓存数据。这仅用于开发,我只使用redis作为结果后端而不是队列任务,在生产部署中全部使用AMQP(redis仅用于缓存)。我没有遇到任何问题,也不明白为什么会有问题(除了性能问题)。对于运行具有不同任务定义的多个celery项目,我认为问题在于如果您有两种不同类型的工作者,每种工作者只能处理一部分工作类型。如果没有单独的数据库,我不确定工作者如何能够知道他们可以处理哪些工作。我可能要确保所有工作者都定义了所有任务类型并且可以处理任何任务,或者想要将单独的项目保存在单独的数据库中。这不需要安装额外的内容,您只需在其中一个celery项目中指定REDIS_DB = 1即可。可能还有另一种方法来解决这个问题。我不确定是否需要多个数据库,但这似乎是合理的。如果您只是使用redis作为结果后端,那么在一个redis数据库上有多个celery项目可能会起作用...但我不太确定。